2014-12-04 78 views
1

正在努力研究以下内容。internetexplorer.application document.getElementByID返回为null/Powershell

查看HTML摘录,ID存在但它一直返回空表达式。不幸的是,我不能在网站上提供任何更多细节......任何明显的我做错了什么?

--- HTML摘录----

<input name="ctl00$mainCopy$LoginView$LoginControl$UserName" type="text" id="ctl00_mainCopy_LoginView_LoginControl_UserName" tabindex="1" class="txtBox" onchange="document.getElementById('ctl00_mainCopy_LoginView_LoginControl_PasswordResetLink').disabled 
= false;" style="width:150px;" /> 

---脚本---

$ie = New-Object -com internetexplorer.application 
$ie.visible = $true 
$ie.navigate("excluded for security") 

$ie.document.getElementByID("ctl00_mainCopy_LoginView_LoginControl_UserName").Value= "excluded for security" 

---- ----错误

你不能调用一个空值表达式的方法。 在线:1 char:1 + $ ie.document.getElementByID(“ctl00_mainCopy_LoginView_LoginControl_UserName”)。Va ... + ~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~ + CategoryInfo:InvalidOperation:(:) [],的RuntimeException + FullyQualifiedErrorId:InvokeMethodOnNull

回答

0

尝试把一个睡眠$ie.navigate命令后,如此:

while ($ie.Busy() -and $ie.ReadyState -ne 4){ sleep -Milliseconds 100 } 

当你尝试获取元素时,它看起来像你的页面仍在加载。

+0

对我来说''ie.Busy'只能作为一个属性,不能像代码片段中的方法调用一样。 – esel 2017-05-16 09:19:10

+0

你是对的,自从我写出这个答案以来它可能已经发生了变化 – 2017-05-16 10:15:33

0

此问题也解决here

我打算假设您的网址位于安全区域,例如“本地Intranet”或“可信网站”。要测试这一点,请尝试使用您的代码导航到www.google.com,而不是“为了安全而排除”。

IE对象用Internet区域上下文打开。有区域提升安全机制来防止脚本(而不是用户)从安全区域导航到另一个安全区域。 Zone Elevation Restrictions

根据您的需求以及您是否有其他限制,此问题有多种解决方案。在这种解决方法是启动PowerShell作为管理员,然后以管理员身份打开IE。 Other solutions by MS.

希望这会有所帮助。

相关问题