Powershell 网页自动化适用于 Internet,而非 Intranet

标签 powershell automation internet-explorer-9

我正在尝试使用 Powershell 进行一些简单的自动化操作,从我们公司的一个本地内联网页面中提取链接 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
}

在我将 URL 替换为本地 Intranet 站点之前,此脚本工作正常。它遵循正常的 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 中。您必须使用“中标签”才能在本地区域中导航。

基本上,保持 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
...

关于Powershell 网页自动化适用于 Internet,而非 Intranet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18117322/

相关文章:

multithreading - 在以 Start-ThreadJob 启动的线程中使用作用域变量修改 PowerShell $

powershell - 获取工作表列中的行数

machine-learning - 例如,文档识别和组织的基 native 器算法从哪里开始?

automation - 如何确保我的网站可以阻止自动化脚本、机器人?

linux - 使用 powershell 将 Linux shell 脚本文件从 Windows 插入到 Linux box

c# - 我应该在 C# 应用程序中存储 WIA 设备还是只存储 WIA 设备 ID?

javascript - IE 和 Firefox 在滚动()上更新 location.hash 的行为不可预测

javascript - 我应该在我的 WIN7 IE9 机器上从 MSXML4 升级还是降级

html - IE9 中绝对 div 的光标问题

powershell - 测试路径返回权限被拒绝 - 如何进行错误处理