我有这个脚本来启动IE,导航到一个页面并搜索一些文本:
$ie = new-object -com "InternetExplorer.Application"
$ie.Visible = $true
$ie.Navigate("http://www.google.com")
$doc = $ie.Document
if ($doc -eq $null)
{
Write-Host "The document is null."
return
}
$tb1 = $doc.getElementsByName("q") # a text box
$tb1.value = "search text";
$btn = $doc.getElementsByName("btnG")
$btn.click()
我将其保存为ps1文件并从命令行运行...但$ie.Document
返回的文档对象始终为null。
我做错了什么?
此外,当我在解释器模式下逐行运行脚本时,将返回文档,但下一行$tb = $doc.getElementsByName("q")
错误:属性'值'在此对象上找不到;确保它存在并且可以设置。
如何设置文本框的值呢?
答案 0 :(得分:3)
您需要在$ doc assignment之前检查IE是否已完成加载页面。例如,
while ($ie.busy) {
#Sleep a bit
}
我尝试使用相同的代码输入搜索文本和按钮单击,但这不起作用。因此,最终将代码修改为
$ie = new-object -com "InternetExplorer.Application"
$ie.Visible = $true
$ie.Navigate("http://www.google.com")
While ($ie.Busy) {
Sleep 2
}
$doc = $ie.Document
$btns = $doc.getElementsByTagName("input")
$SearchText = $btns | ? { $_.Name -eq "q" }
$SearchText.value = "search text"
$SearchButton = $btns | ? { $_.Name -eq "btnG" }
$SearchButton.click()
答案 1 :(得分:1)
我相信我可以看到两个问题。首先,Ravikahth建议添加等待页面完成加载的能力很重要。如果您不等待页面加载(即$ ie.busy -eq $ false),那么您将无法获得完整的文档。
其次,无论出于何种原因,Google决定添加名为“q”的多个输入字段。您可以向Ravikanth的查询添加第二个条件,如下所述:
$SearchText = $btns | ? { $_.Name -eq "q" -and $_.Type -eq "text"}