我有一个网站,有一个按钮,不成为活动,直到一个选项被选中。但是我选择了一个选项,这个按钮仍然不会激活,除非我物理地点击它。我正在考虑使用发送键vb风格的powershell脚本,但听说它不推荐,因为焦点问题。[System.Windows.Forms.SendKeys]::SendWait(“{ENTER}”)
这就是我曾经尝试过的,但并没有为我工作。(我可以更改列表选项,但不能单击该按钮,因为它是灰色的)。我看到它使用了某种类型的XML1.0,我可以用它或"Go_NextPage(document.FORM.Class)"做一些事情吗?
Powershell:
$ie = New-Object -ComObject "InternetExplorer.Application"
$ie.navigate("http://website/address")
$ie.visible =$true
While ( $ie.busy -eq $true){
[System.Threading.Thread]::Sleep(1000)
}
$doc = $ie.document
$type = $doc.getElementById("class")
#$type.click() << was seeing if i could click it even though its not a button.
$type.value = "7"
$bt = $doc.getElementsByTagName("input") |
Where-Object {$_.Name -eq "Class_Button"}
$bt.click() # but is grayed outHTML代码:
<td>
<select name="Class" id="Class" size="1">
<script language="JavaScript" type="text/javascript">
//<![CDATA[
AdrTypeList();
//]]>
</script>
<option value="2">Some </option>
<option value="3">Thing </option>
<option value="7">File
</option></select>
<input type="button" class="ButtonEnable" name="Class_Button"
id="Class_Button" value="Set " onclick="Go_NextPage(document.FORM.Class)">
</td>发布于 2017-01-18 00:13:15
下面的答案是基于我在本地机器上测试样本PowerShell和HTML的经验。虽然我下面提到的改变在我的机器上起作用..。点击这里的按钮,显然什么也不做,所以我不能100%保证它会在你的一端工作。
我确信传入'getElementById‘的字符串是区分大小写的,所以'Class’不同于'class‘。
在我对代码的测试中,我最初得到一个空对象,直到更改大写为止。
接下来您会发现,该方法返回一个集合(在本例中是一个集合),因此您需要引用特定的对象来设置value属性(例如$type[0].value = "7")。
最后,“getElementByTagName”返回的对象似乎没有提供您所期望的所有信息(或方法)。特别是对我来说,没有名称值,也没有单击方法。
与其使用标签名和where语句,我建议直接使用名称:
$doc.IHTMLDocument3_getElementsByName('Class_Button')( $doc.getElementsByName('Class_Button')不适合我,而且我看到很多人建议默认使用ITHMLDocument3方法。)
这样做的寓意是理智地检查你的代码。运行一行并再次检查预期返回的内容是否实际返回,请尝试运行该方法,而不将其赋值给变量,以确定它是否正确地输出到提示。
https://stackoverflow.com/questions/41704642
复制相似问题