我正在尝试使用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()
提前谢谢!
我正在使用:
编辑:如注释中所建议,我尝试使用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)"
答案 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)
这个问题实际上非常简单,如此简单,我没想到...我必须以管理员身份运行程序,然后它才能工作。
谢谢大家的帮助!