用powershell关闭弹出窗口

问题描述:

目前我正在研究一个脚本来自动化IE中的一个进程,以添加计算机名称及其MAC,以便我们可以对它们进行映像。该页面有两个字段,一个用于MAC,另一个用于计算机名称,然后添加新按钮。目前它仍然是手动输入,但我打算从csv中读取一次执行大量组。用powershell关闭弹出窗口

我现在遇到的问题是每当有一个重复的记录它告诉你一个JavaScript弹出。该弹出窗口禁用与IE页面的交互。我需要一种方法来关闭条目间的弹出窗口。

这就是我的代码目前的样子。

cls 

$URL = "" 
$iterator = 1; 

#starts IE 
$ie = new-object -ComObject "InternetExplorer.Application" 

#visible for testing purposes 
$ie.visible = $true 
#$ie.silent = $true 
$ie.navigate($URL) 

#Manual Input 
$newMAC = read-host -prompt 'Input MAC here' 
$newNAME = read-host -prompt 'Input Computer Name here' 

while($ie.Busy -eq $true) { start-sleep -Milliseconds 100 } 

#enters information into appropriate fields and clicks the add button 
($ie.document.getElementsByName("mc_id") |select -first 1).value = $newNAME; 
($ie.document.getElementsByName("mac_id") |select -first 1).value = $newMAC; 
($ie.document.getElementsByName("btnAddNew") |select -first 1).click(); 

编辑:

我决定的那一刻,在结束我的COM对象为每个新进入一个草率的解决方案。然而,我现在有导入csv供脚本读取的问题。

+0

Yikes,我甚至不知道PowerShell可以做到这一点。由于这是用JavaScript标记的,JavaScript解决方案可以接受吗? – Gerrit0

+0

一种可能的方法是使用user32.dll上的某个函数,如[DestroyWindow](https://msdn.microsoft.com/en-us/library/windows/desktop/ms632682(v = vs.85)。 aspx)p/invoke签名可以[在这里找到](http://www.pinvoke.net/default.aspx/user32.DestroyWindow)这里是一个[使用P/invoke签名的指南](http:// www .leeholmes.com/blog/2009/01/19/powershell-pinvoke-walkthrough /) – BenH

+0

@BenH我会研究这个,谢谢你的建议。 –

$wshell = New-Object -ComObject wscript.shell; 
if($wshell.AppActivate('Message from webpage')) 
{ 
    Start-Sleep -Seconds 1 
    [System.Windows.Forms.SendKeys]::SendWait('{Enter}') 
} 

此代码将设置活动窗口到具有的"Message from webpage"标题的窗口,以便对其进行调整,以匹配弹出标题。

然后它会发送Enter按键。您可能可以调整此设置以发送组合键来消除弹出窗口。也许甚至使用::SendWait('%{f4}')发送ALT+F4

我假设Javascript弹出窗口在新窗口中打开。或者,我会看到该页面上使用了哪些其他JavaScript,并且如果它仅用于弹出窗口,则会查找该com页面上禁用Javascript的页面。

编辑:

要禁用JavaScript的,你需要将它添加到受限制的站点安全区域,并确保该区域的JavaScript执行关闭,关闭所有的Java代码执行此页。但我有一个更好的主意,你可以使用COM对象,试图打破了网页弹出功能:

$ie = new-object -ComObject "InternetExplorer.Application" 
$ie.visible = $true 
$ie.navigate("http://www.echoecho.com/jswindows03.htm") 
$ie.Document.body.innerHTML = $ie.Document.body.innerHTML -replace "popup\('www.yahoo.com', 'Win1', 300, 300\);", "" 

该代码块打开,有一个演示的javascript弹出功能的页面,然后它删除功能来自按钮onclick的事件。导致流行永远不会被调用。你可以做同样的技巧,我已经做了修改页面的客户端副本,并打破JavaScript或修改它永远不会显示。

+0

我刚试过这个,它似乎没有切换到弹出窗口,但确实发送了输入。我将如何去禁用COM对象中的JavaScript? –

+0

添加了对我的答案的更新。没有看到页面源代码,我无法解决你所有的问题,但这应该足以让你去。以编程方式编辑页面html代码以删除警报JavaScript似乎工作。 '-replace'将正则表达式匹配html并将其替换为''“'在我的示例中没有任何结果 – Nick

+0

@ P.McDevitt是否有运气? – Nick