我正在尝试使用Powershell进行一些简单的自动化,从我们公司的本地Intranet页面中提取链接URL,然后使用这些URL进行一些工作.最后,我将使用该脚本打开每个链接,然后单击页面上的按钮.我在Windows 7 x64中使用Internet Explorer 9.
这是一个简单的工作PowerShell脚本示例,它显示页面上的所有链接:
$ie = new-object -com "InternetExplorer.Application" $ie.Visible = $true $ie.Navigate( "http://www.reddit.com" ) While ($ie.Busy) { Sleep 1 } $links = $ie.Document.getElementsByTagName("a") $links | foreach { write-host $_.href }
此脚本正常工作,直到我用本地Intranet站点替换URL.它遵循正常的URL方案(http://internaldomain.com/etc),但它被识别为Intranet站点.一旦我试图在Intranet区域中刮取页面,$ie.Document值突然变为NULL并且脚本失败.
我猜它与该区域的一些模糊设置有关……我不确定.我在网上找到了一些建议,比如将它添加到您信任的网站,但这没有用.这是我第一次将Powershell用于Web自动化,因此任何帮助或见解都将受到赞赏.
解决方法
也许解决方案在这里:
http://blogs.msdn.com/b/ieinternals/archive/2011/08/03/internet-explorer-automation-protected-mode-lcie-default-integrity-level-medium.aspx
它解释了不同级别的标签,即.您必须使用“中选项卡”在本地区域中导航.
基本上,保持ie设置和使用脚本的最佳方法是创建一个注册表项,如上面的链接所述.
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\InternetExplorer.ApplicationMedium] [HKEY_CLASSES_ROOT\InternetExplorer.ApplicationMedium\CLSID] @="{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}"
在您的脚本中,使用这个新的com对象:
$ie = new-object -Com InternetExplorer.ApplicationMedium ...