【问题标题】:How to make PowerShell $ie COM object reference new browser window如何使 PowerShell $ie COM 对象引用新的浏览器窗口
【发布时间】:2016-03-23 13:58:01
【问题描述】:

我有一个 powershell 脚本,它登录到一个站点并单击一个指向外部站点的链接。单击链接时,它将在新窗口中打开并关闭原始窗口。

这是一个问题,因为我需要访问新页面上的元素,但我无法对文档执行任何命令(例如 getElementById),因为 $ie com 对象仍在引用原始窗口。有没有办法告诉 $ie com 对象引用打开的新窗口而不是旧窗口?任何帮助表示赞赏。谢谢

【问题讨论】:

    标签: html powershell


    【解决方案1】:

    您需要连接到正确的 IE 实例。

    $AllExplorers = (New-Object -ComObject Shell.Application).Windows() 
    

    这将返回所有 File 和 Internet Explorer 对象。

    接下来您可以通过名称或 URL 找到您的 IE。

    $MyIE = $AllExplorers | Where-Object {$_.LocationName -eq "Google"}}
    $MyIE = $AllExplorers | Where-Object {$_.LocationUrl -like "*google.com*"}
    

    您现在可以在 $MyIE 中搜索元素...

    $element = $MyIE.Document.getElementById('ID')
    

    【讨论】:

    • 感谢您的回复。我试过这个并收到此错误消息:“枚举集合时发生错误:访问被拒绝。(来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))。”
    • 我使用的是 IE com 对象,而不是 shell:代码如下所示:$AllExplorers = (New-Object -com InternetExplorer.Application).Windows() [NEWLINE] $AllExplorers
    • 更新:我将 $AllExplorers 变量设为数组,从而解决了我的最后一个错误。但是现在我收到这个新错误:方法调用失败,因为 [System.__ComObject] 不包含名为“Windows”的方法。
    • 我正在尝试使用“Shell.Application”而不是“InternetExplorer.Application”,以便访问“.Windows()”属性,但也会出现错误。有没有办法通过 InternetExplorer.Application 对象访问 Windows()?
    • @Quanda 你运行的是什么版本的 PS?您在 STA 中运行吗? (单线程单元)一些 COM 组件需要它。
    【解决方案2】:

    已解决

    创建了一个新的 InternetExplorer.Application COM 对象,就像这样

    $ie2 = New-Object -COMObject InternetExplorer.Application
    
    $ie2.Navigate("linkToPopupWindow.com")
    

    然后我可以在执行睡眠后引用 $ie2 的文档对象,如下所示:

    Start-Sleep -Seconds 3
    $doc = $ie2.Document
    

    这对我有用。感谢大家的意见。希望这对其他人有帮助。如果有人遇到类似情况,请随时给我发消息,我可以尝试提供帮助!

    【讨论】:

      猜你喜欢
      • 2010-10-23
      • 2017-11-07
      • 1970-01-01
      • 1970-01-01
      • 2010-11-05
      • 1970-01-01
      • 1970-01-01
      • 2021-11-01
      • 1970-01-01
      相关资源
      最近更新 更多