Powershell IE对象查找正确的元素

Powershell IE对象查找正确的元素,powershell,internet-explorer,Powershell,Internet Explorer,我试图访问弹出窗口的一个元素,它似乎嵌入在iframe中。下面是我正在处理的html。下面我感兴趣的一行是…好的…/a>。我遗漏了一些html,因为它相当大,我不认为它会有帮助。如果需要,我可以张贴。我已经尝试了许多组合来访问这个,但到目前为止,没有得到确定按钮。下面是我的最佳猜测代码,它不起作用 $ie.Document.getElementsByTagName("A") | Where {$_.getAttributeNode ('class').Value -eq 'btn btn3d

我试图访问弹出窗口的一个元素,它似乎嵌入在iframe中。下面是我正在处理的html。下面我感兴趣的一行是…好的…/a>。我遗漏了一些html,因为它相当大,我不认为它会有帮助。如果需要,我可以张贴。我已经尝试了许多组合来访问这个,但到目前为止,没有得到确定按钮。下面是我的最佳猜测代码,它不起作用

$ie.Document.getElementsByTagName("A") | Where {$_.getAttributeNode 
('class').Value -eq 'btn btn3d PopupBtn'} 


...

按钮位于iframe内部,iframe有自己的单独DOM

  • 查找
    iframe
    元素
  • 在iframe的
    contentDocument

  • 这是最后的答案。非常接近下面的内容,但我的最终答案令人费解。我在这个HTML文档中有两个iFrame,由于某种原因,src搜索不会返回正确的结果。相反,我不得不消除另一个。很奇怪,但很有效。第二行是大杂烩。我在谷歌上搜索,发现尝试contentwindow可能有用。经过多次迭代后,我得出了以下结论。我不得不使用contentwindow而不是contentdocument。(有人知道为什么吗??)我还需要更改where子句,因为在同一个类名下有两个按钮。对我来说,这里的独特价值是干旱。一旦我得到了对正确对象的引用,就很容易看到所需的更改。沃克索姆对此深感荣幸

    $iframe =  $ie.Document.getElementsByTagName('iframe') 
        | Where { $_.id -notcontains 'pinghtml' }
    
    $ok = $iframe.contentwindow.document.body.getElementsByTagName('a') 
        | Where {$_.getAttributeNode('arid').Value -eq '2'}
    
    $ok.click()
    

    多谢。这是一个很好的信息,但不适合我。奇怪的是,第一行$iframe是空的。不过,我可以使用ID获取iframe元素,作为临时解决方案,因为这将发生变化。当我有$iframe对象时,第二行给出了一个空值表达式错误。我认为内容文档是个问题。使用“文档”不会返回任何内容。最后!感谢w0xx0m让我走上了正确的轨道。如果没有上述答案,这是不可能的。
    $iframe = $ie.Document.getElementsByTagName('iframe') | 
        Where { $_.src -contains '/messagepopup.html' }
    $ok = $iframe.contentDocument.getElementsByTagName('a') |
        Where { $_.className -eq 'btn bnt3d PopupBtn' }
    
    $iframe =  $ie.Document.getElementsByTagName('iframe') 
        | Where { $_.id -notcontains 'pinghtml' }
    
    $ok = $iframe.contentwindow.document.body.getElementsByTagName('a') 
        | Where {$_.getAttributeNode('arid').Value -eq '2'}
    
    $ok.click()