我正在尝试使用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自动化,因此我们将不胜感激。
答案 0 :(得分:6)
它解释了不同级别的标签,即。您必须使用“中选项卡”在本地区域中导航。
基本上,保持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
...
答案 1 :(得分:0)
使用
$ie.Document.documentElement.getElementsByClassName("underline")
并享受.....
答案 2 :(得分:0)
由于计算机上的政策限制,我无法访问注册表来创建另一个答案中提到的密钥。但是,我确实找到了一种使用PowerShell间接执行此操作的方法,以防对其他人有帮助:
$type = [Type]::GetTypeFromCLSID('D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E')
$ie = [System.Activator]::CreateInstance($Type)
$ie.Visible = $true
$URL = "http://my.intranet.com"
$ie.Navigate($URL)
Write-Host "`$ie.Busy:" $ie.Busy
Write-Host "`$ie.ReadyState:" $ie.ReadyState
while($ie.Busy -or ($ie.ReadyState -ne 4) ) {
Start-Sleep -s 1
}
Write-Host "IE is ready"