SIM
SIM

Reputation: 22440

Unable to switch to a new tab in an efficient manner

I've written a script in vba which is able to click on a certain link (Draw a map) of a webpage. When the clicking is done, a new tab opens up containing information I would like to grab from. My script can do all these errorlessly. Upon running the script it scrapes the title visible as Make a Google Map from a GPS file from the new tab.

My question: is there any alternative way to switch to new tab other than using hardcoded search like If IE.LocationURL Like "*" & "output_geocoder" Then?

This is my script:

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

To execute the above script, add this reference to the library:

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

Btw, there is nothing wrong with the above script. I only wish to know any better way to do the same.

Upvotes: 1

Views: 93

Answers (1)

QHarr
QHarr

Reputation: 84465

This is the best I have so far with selenium

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

The more fixed with title is:

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

tl;dr;

I will need to read up more on how robust .SwitchToNextWindow is.

FYI, you can get handles info with:

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

Upvotes: 1

Related Questions