无法有效切换到新标签页

时间:2018-06-24 17:32:46

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

我用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

顺便说一句,以上脚本没有任何问题。我只想知道任何更好的方法来做到这一点。

1 个答案:

答案 0 :(得分: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

更固定的标题是:

.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")