powershell 是否具有能够控制 IE 导航的先决条件?

Are there any prerequisites for powershell to be able to control IE navigation?

提问人:Tamanna Agarwal 提问时间:4/24/2020 更新时间:4/24/2020 访问量:148

问:

我很难在应用程序浏览器中捕获搜索的输出。

要求: 1. 登录到应用程序 URL。 2.搜索 3.捕获结果

我有一个代码,它在一台服务器上运行良好,但在其他机器上表现得很奇怪。powershell 版本和 IE(11) 在所有这些版本上都是相同的。在好的服务器上,一切都很好。在错误的服务器上,powershell 无法仅获取第 3 点的元素和类名。它每次都捕获空字符串。甚至$ie。Document.getElementsByTagName(“body”) 在错误的服务器上返回空。

我是 powershell 的新手,不确定我是否错过了任何东西。任何人都可以在这里提出想法吗?

代码如下:

$username = "user1" 
$password = "pwd1" 
$url="application URL"
$search="tamanna"
$ie = New-Object -ComObject 'InternetExplorer.Application' 
$ie.visible=$true
$ie.navigate($url)
while($ie.ReadyState -ne "4") 
{
start-sleep -Seconds 5;
}
($ie.document.getElementById("login-form-username") |select -first 1).value = $username;
($ie.document.getElementById("login-form-login-password") |select -first 1).value = $password;
$ie.document.getElementById("login-form-login").click()
while ($ie.Busy -eq $true) { Start-Sleep -Seconds 5; }
$ie.navigate("Search URL within application")
while ($ie.ReadyState -ne "4") { Start-Sleep -Seconds 5; }
$text=$ie.Document.getElementsByTagName("span") | Where-Object{$_.className -eq 'class1_unique'} |select -first 1
while ($ie.ReadyState -ne "4") { Start-Sleep -Seconds 5; }
$searchResult=$text.innerText
$searchResult
HTML PowerShell Internet-Explorer DOM 自动化

评论


答:

0赞 Deepak-MSFT 4/24/2020 #1

我试图测试您的代码以检查其中是否存在问题。根据我的测试结果,您的代码在我这边运行良好。

经过一番研究,我发现该问题可能与Internet Explorer安全设置有关。

我注意到,当为 Internet 区域启用保护模式时,我得到了相同的行为。

enter image description here

出于测试目的,您可以尝试禁用 Internet本地 Intranet 区域的保护模式,以查看它是否有助于解决您的问题。或者,您可以尝试以管理员身份运行脚本。

要禁用保护模式,您可以参考以下步骤。

  1. 启动 Internet Explorer 浏览器。

  2. 单击“工具”(Alt + X)。

  3. 单击“Internet 选项”。

  4. 单击“安全”选项卡。

  5. 未选中 Internet本地 Intranet 区域的启用保护模式选项。

  6. 重新启动 Internet Explorer 浏览器。

之后,尝试运行 PowerShell 脚本以查看结果。

让我们知道您的测试结果,它是否解决了这个问题。

评论

0赞 Tamanna Agarwal 4/24/2020
我按照你的步骤操作,但它似乎没有解决问题。还有其他建议吗?此外,令人惊讶的是,在登录页面上,我可以得到$ie。Document.getElementsByTagName(“body”)。但是,登录后,$ie。Document.getElementsByTagName(“body”) 给了我 null 值。我已经检查了就绪状态,它是 4。我对如何解决这个问题一无所知,
0赞 Deepak-MSFT 4/24/2020
您能否告知我们它是内部网站还是您从互联网访问该网站?您为哪个区域禁用了保护模式?两个 URL 是同一域的一部分?您是否尝试以管理员身份运行脚本?
0赞 Tamanna Agarwal 4/24/2020
它是一个 Intranet 站点。话虽如此,请注意,该代码在一台服务器上运行良好。两台服务器上的保护模式设置相同(为本地 Intranet 和 Internet 启用)。我仍然禁用并在错误的服务器上重试,代码仍然不起作用。是的,我也以管理员身份运行了脚本:(
0赞 Deepak-MSFT 4/24/2020
正如我通知您的那样,该问题与代码无关。我认为这与设置或配置有关。如果直接运行脚本,请尝试使用 Windows Powershell ISE 应用打开脚本文件并运行脚本以查看它是否显示任何错误消息。
0赞 Tamanna Agarwal 4/24/2020
我一直在测试所有这些,同时仅使用ISE应用程序,并启用了调试和断点。没有什么能帮助我解决这个问题。我确实明白这是无法获得$ie。在我的应用程序 URL 中搜索后,Document.* 但不知道如何让它工作。关于设置,我想知道如何弄清楚,在这一点上一切看起来都一样:(