Internet Explorer对象没有文档子级

时间:2019-08-12 13:01:29

标签: powershell internet-explorer

我正在尝试使用PowerShell填写表单。所以我只是想这样做:

$ieObject = New-Object -ComObject 'InternetExplorer.Application';
$ieObject.Visible = $true;;
$ieObject.Navigate('https://www.randomizer.org/');
$currentDocument = $ieObject.Document;
$inputbox = $currentDocument.getElementByID('randSets');
$inputbox.value = "My Value"; 

但是这给了我错误

You cannot call a method on a null-valued expression.
At line:5 char:1
+ $inputbox = $currentDocument.getElementByID("randSets");

我不完全知道为什么,但是我的ieObject没有所有的属性(应该只有50个,我只有9个)和应该具有的方法。当我使用Get-Member时看不到Document,这是正常现象还是我做错了什么?

PS C:\Users\n> $ieObject | Get-Member

   TypeName: System.__ComObject

Name                      MemberType Definition                                            
----                      ---------- ----------                                            
CreateObjRef              Method     System.Runtime.Remoting.ObjRef CreateObjRef(type re...
Equals                    Method     bool Equals(System.Object obj)                        
GetHashCode               Method     int GetHashCode()                                     
GetLifetimeService        Method     System.Object GetLifetimeService()                    
GetType                   Method     type GetType()                                        
InitializeLifetimeService Method     System.Object InitializeLifetimeService()             
ToString                  Method     string ToString()                                     

提前谢谢!


我正在使用:

  • Windows 10企业版(所以我在想,也许我的公司阻止了某些功能,我将与我的IT部门核对)
  • Powershell版本为5.1
  • Internet Explorer 11.885版

编辑:如注释中所建议,我尝试使用VBA进行与powershell脚本相同的操作,并且在Document对象Method 'Document' of object 'IWebBrowser2' failed'上遇到相同的错误。这意味着我无法正确访问Internet Explorer应用程序。在这种情况下,我认为我应该等待IT部门的最终答案,然后再添加更多内容。

因此,在使用导航之前,我可以访问该对象及其每个属性。然后,即使是Get-Member,我也会收到错误消息:

Get-Member : The following exception occurred while retrieving the string representation 
for property "Application" : "The RPC server is unavailable. (Exception from HRESULT: 
0x800706BA)"

3 个答案:

答案 0 :(得分:0)

正在发生的情况是,在您呼叫$currentDocument = $ieObject.Document;时,页面尚未加载,导致$currentDocument$null

您应该可以使用.Busy

进行修复
$ieObject = New-Object -ComObject 'InternetExplorer.Application'
$ieObject.Visible = $true
$ieObject.Navigate('https://www.randomizer.org/');
do{
   Start-Sleep -Milliseconds 10
}while($ieObject.Busy)
$currentDocument = $ieObject.Document
$inputbox = $currentDocument.getElementByID('randSets')

答案 1 :(得分:0)

这在这里工作:

$ieObject = New-Object -Com InternetExplorer.Application

$ieObject.Visible = $true
[void]$ieObject.Navigate2('https://www.randomizer.org/')

while ($ieObject.busy) {
        sleep -seconds 1
}

$currentDocument = $ieObject.Document
$inputbox = $currentDocument.getElementByID('randSets')
$inputbox.value = "My Value"

您必须等待浏览器加载所有对象。

答案 2 :(得分:0)

这个问题实际上非常简单,如此简单,我没想到...我必须以管理员身份运行程序,然后它才能工作。

谢谢大家的帮助!