我正在尝试自动化网站,发现自己需要访问iframe的内容。由于这是一个内部应用程序,我已经放入了这个示例,它说明了错误
$ie = new-object -com "InternetExplorer.Application"
$ie.navigate("http://arstechnica.com/")
$ie.visible = $true
$doc = $ie.document
$maglistcontrol = $doc.getElementById("mag_list")
$maglistcontrol.value= "Concierge"
以下是我收到的错误消息
You cannot call a method on a null-valued expression.
At line:6 char:38
+ $maglistcontrol = $doc.getElementById <<<< ("mag_list")
+ CategoryInfo : InvalidOperation: (getElementById:String) [], RuntimeExce
ption
+ FullyQualifiedErrorId : InvokeMethodOnNull
Property 'value' cannot be found on this object; make sure it exists and is settable.
At line:7 char:17
+ $maglistcontrol. <<<< value= "Concierge"
+ CategoryInfo : InvalidOperation: (value:String) [], RuntimeException
+ FullyQualifiedErrorId : PropertyNotFound
问题是,mag_list字段位于iframe中且引用无效。有什么想法吗?
答案 0 :(得分:3)
以下代码对我有用,有些信息来自http://www.dyn-web.com/tutorials/iframes/
# give your url here in this line instead of sample url
& "$env:programfiles\Internet Explorer\iexplore.exe" 'http://blahblahblah'
$win = New-Object -comObject Shell.Application
$try = 0
$ieObj = $null
do {
Start-Sleep -milliseconds 500
# plese use your title instead of "your_title" to identify the window correct
$ieObj = @($win.windows() | ? { $_.locationName -like '*your_title*' })[0]
$try ++
if ($try -gt 20) {
Throw "Web Page cannot be opened."
}
} while ($ieObj -eq $null)
[System.Threading.Thread]::Sleep(1000)
# put both Iframe name and id both to "fraMain"
$ieObj.document.getElementbyID("fraMain").contentWindow.document.getElementbyID("name").value = "test name"
$ieObj.document.getElementbyID("fraMain").contentWindow.document.getElementbyID("button").Click()
希望这有帮助
答案 1 :(得分:0)
我尝试这样做但是无法成功地从PowerShell操作IE(很奇怪;我得到了一个$ ie变量,但之后的所有访问都失败了。)
框架位于Window对象中:框架集合。
理论上,你可以通过$ ie.document.parentWindow获取窗口对象。
所以,这应该可行,但我无法测试它:
$doc = $ie.document
$w = $doc.parentWindow
$fr = $w.frames[0] # assuming you want the first frame
$uidfield = $fr.document.getElementById("uid")
希望这有帮助。
答案 2 :(得分:0)
看起来您的问题是COM对象变得无法使用。我已经看到有时会产生一个新的IE对象来处理请求(我不知道为什么,也许有人知道)。你需要再次找到这样的窗口:
$Shell = New-Object -COM Shell.Application
$Shell.Windows() ## Find the right one in the list
$ie = $Shell.Windows().Item(1) ## Grab the window
但我无法找到您正在寻找的“mag_list”标签。