【问题标题】:Internet Explorer won't close my tab with $ie.Quit() because of Redirection由于重定向,Internet Explorer 不会使用 $ie.Quit() 关闭我的选项卡
【发布时间】:2020-07-22 05:47:56
【问题描述】:

如果我想关闭我用 powershell 打开的最新 Internet Explorer 选项卡 - 它不起作用 - 因为我被重定向到另一个站点进行登录。有人知道如何解决这个问题吗?

        try
    {
    
        Write-Host "Starting Internet Explorer to get login token..."
        $ie = New-Object -ComObject InternetExplorer.Application 
        $ie.visible = $true
        $ie.Navigate("redirectLink")
    
        Start-Sleep -s 3
    
        $ie.Quit()

...

【问题讨论】:

  • 我试图测试这个问题,但我无法使用上面的代码产生问题。选项卡正确关闭。如果 URL 是公开的,那么您可以尝试共享它。除此之外,您可以尝试告知我们您用于进行此测试的操作系统版本可能有助于缩小问题范围。

标签: windows powershell internet-explorer


【解决方案1】:

我已经使用来自 Google Ad 的重定向链接尝试了您在 Windows 10 v2004 上列出的代码。我也尝试过手动更改选项卡上的页面。在这两种情况下,当$ie.Quit() 运行时,它会关闭已打开的选项卡。我使用以下链接运行代码:

Write-Host "Starting Internet Explorer to get login token..."
$ie = New-Object -ComObject InternetExplorer.Application 
$ie.visible = $true
$ie.Navigate("https://www.google.com/aclk?sa=L&ai=DChcSEwijmJW6muDqAhVRPa0GHYV_B-IYABBcGgJwdg&sig=AOD64_2UgwCRNkwusFaFWEyYsktiUml6DA&ctype=46&rct=j&q=&ved=0ahUKEwjrppC6muDqAhXIi54KHVnCAREQwzwIUw&adurl=")
    
Start-Sleep -s 3
    
$ie.Quit()

我无法重现该错误,因此我目前的理论是这不仅仅是重定向(其中,一个页面将您发送到同一选项卡中的不同页面)。我怀疑您要访问的任何链接都会打开一个新标签并关闭您现有的标签作为其过程的一部分(关闭窗口,打开窗口)。因此,我建议在此答案中使用 Andy Schneider 提供的函数来显式调用需要关闭的窗口:

How to close a tab in existing IE window using powershell

Function Close-IETab {
param($url)

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

    foreach ($oWindow in $oWindows.Invoke()) {

        if ($oWindow.Fullname -match "IEXPLORE.EXE" -and $oWindow.LocationURL -match $url) {

            Write-verbose "Closing tab $($oWindow.LocationURL)"
            $oWindow.Quit()
        }
    }

}

【讨论】:

  • rpc 服务器不可用。 (来自 hresult 0x80070 6ba 的异常)现在发生。你有什么主意吗? + CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,start.ps1
  • 当我最初运行我的代码,玩弄它,然后再次尝试时,我收到了那个错误。运行 `$ie.Quit()' 部分几次以清除 powershell 中的“缓存”,然后再试一次。
  • 我不知道为什么,但我的脚本无法与 ie.quit 一起使用,但如果我仅使用控制台尝试它,它就可以工作。你知道这个问题吗?
  • 恐怕不行。我只是尝试在我的环境中以几种方式运行此代码,但 $ie.Quit() 在迭代中有效。您是从计划任务中运行它,还是右键单击并“使用 powershell 运行”?
  • @plattio,尝试在 IE.Quit 之后暂停代码。如果有任何错误,它将被显示。尝试使用 Windows Powershell ISE 运行脚本。它还有助于获取错误信息。尝试使用 Windows Powershell ISE 调试代码。
猜你喜欢
  • 1970-01-01
  • 2017-09-05
  • 1970-01-01
  • 1970-01-01
  • 2012-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多