Невозможно эффективно перейти на новую вкладку - PullRequest
0 голосов
/ 24 июня 2018

Я написал скрипт в 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 голосов
/ 24 июня 2018

Это лучшее, что у меня есть с селеном

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

ТЛ; др;

Мне нужно больше узнать о том, насколько устойчив .SwitchToNextWindow.

К вашему сведению, вы можете получить информацию о ручках с помощью:

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