【问题标题】:Unable to switch to a new tab in an efficient manner无法以有效的方式切换到新标签
【发布时间】:2018-12-03 08:57:39
【问题描述】:

我在 vba 中编写了一个脚本,它能够点击网页的某个链接 (Draw a map)。单击完成后,会打开一个新选项卡,其中包含我想从中获取的信息。我的脚本可以无误地完成所有这些工作。运行脚本后,它会从新选项卡中将标题显示为 Make a Google Map from a GPS file

我的问题:除了使用像If IE.LocationURL Like "*" & "output_geocoder" Then 这样的硬编码搜索之外,还有其他方法可以切换到新标签吗?

这是我的脚本:

Sub FetchInfo()
    Const url As String = "http://www.gpsvisualizer.com/geocoder/"
    Dim IE As New InternetExplorer, Html As HTMLDocument, R&
    Dim winShell As New Shell

    With IE
        .Visible = True
        .navigate url
        While .Busy = True Or .readyState < 4: DoEvents: Wend
        Set Html = .document
    End With

    Html.querySelector("input[value$='map']").Click

    For Each IE In winShell.Windows
        If IE.LocationURL Like "*" & "output_geocoder" Then
            IE.Visible = True
            While IE.Busy = True Or IE.readyState < 4: DoEvents: Wend
            Set Html = IE.document
            Exit For
        End If
    Next

    Set post = Html.querySelector("h1")
    MsgBox post.innerText
    IE.Quit
End Sub

要执行上述脚本,请将此引用添加到库中:

Microsoft Shell Controls And Automation
Microsoft Internet Controls
Microsoft HTML Object Library

顺便说一句,上面的脚本没有错。我只想知道有什么更好的方法来做同样的事情。

【问题讨论】:

  • 你是本周末第二个上图的人。你试过硒吗?
  • 如果您的代码运行良好并且您只是想对效率进行第二次评估,那么Code Review 是一个更好的地方。 (参见:SO help center
  • 我看到了那个帖子并尝试使用新标签,但我只知道这种方法,这就是为什么我在这里发布同样的方法以寻找替代方法@QHarr。
  • 上述脚本中使用的链接只是一个占位符。它可以是任何包含打开新标签功能的链接。我只想知道如何以更好的方式切换到新标签@ashleedawg。顺便说一句,感谢那天教我 Like 运算符的用法。
  • 不循环使用新窗口标题切换呢?可以接受吗?啊……不!

标签: vba excel web-scraping internet-explorer-11


【解决方案1】:

这是迄今为止我用硒最好的

Option Explicit
Public Sub GetInfo()
    Dim d As WebDriver
    Set d = New ChromeDriver
    Const url = "http://www.gpsvisualizer.com/geocoder/"

    With d
        .Start "Chrome"
        .get url
        .FindElementByCss("input[value$='map']").Click
        .SwitchToNextWindow
        .FindElementByCss("input.gpsv_submit").Click
         MsgBox .Title
        Stop
        .Quit
    End With
End Sub

用title比较固定的是:

.SwitchToWindowByTitle("GPS Visualizer: Draw a map from a GPS data file").Activate
.FindElementByCss("input.gpsv_submit").Click

tl;dr;

我需要详细了解.SwitchToNextWindow 的强大程度。

仅供参考,您可以通过以下方式获取句柄信息:

Dim hwnds As List
Set hwnds = driver.Send("GET", "/window_handles")

【讨论】:

  • 是的,这是一种更快更干净的方法。顺便说一句,如果您遇到与此问题相关的任何使用 IE 的解决方案,请随时在此处放置链接。谢谢。
  • IE 我一直循环播放。但如果我这样做,我会把它放在这里。可能有一种 cmd 方法可以在没有循环的情况下获取目标信息,但我没有证据表明循环和搜索预期文本更安全。
猜你喜欢
  • 2015-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-09
  • 1970-01-01
  • 1970-01-01
  • 2011-12-16
相关资源
最近更新 更多