Selenium Basic VBA сосредоточиться на новой вкладке, которая открывается нажатием - PullRequest
0 голосов
/ 26 мая 2019

Я работаю над Selenium Basic Wrapper для Excel VBA, но после нажатия кнопки, открывающей новую вкладку, я не могу заставить веб-драйвер селена переключить фокус на новую открытую вкладку и закройте исходную вкладку. Поверьте, это должно быть достигнуто с помощью Java Selenium, но есть ли способ сделать это через оболочку Selenium Basic в Excel VBA?

Попытка использовать bot.switchtopreviouswindow / nextwindow безрезультатно, Selenium, похоже, даже не обнаруживает новую вкладку / окно, открытое как существующее окно, также пыталась использовать switchwindow с использованием заголовка безрезультатно ...

Private Sub CommandButton1_Click()

    Dim bot As New ChromeDriver
    Dim merchant As String
    Dim promocode As Object
    Dim number As Long
    Dim test As Object
    Dim testnumber As Integer

    lastColumn = Sheets("Merchants").Range("B" & Rows.Count).End(xlUp).Row

    For i = 2 To lastColumn

        bot.Get (Sheets("Merchants").Range("B" & i).Value)
        merchant = Sheets("Merchants").Range("A" & i).Value

        For Each promocode In bot.FindElementByClass("main_vouchers").FindElementsByClass("c")

            number = Right(promocode.Attribute("id"), 6)

            If IsEmpty(promocode) = True Then Exit For


            promocode.FindElementByClass("go").Click

            #This is the part I have problems with as after click, original page re-directs to another page, and new tab opens (which is the place  I want focus on). Also, I need the original tab closed so that Chrome doesn't end up opening too many tabs due to the loop running. Appreciate the help!

        Next promocode

    Next i

End Sub

Просто нужно Selenium, чтобы переключить фокус на вновь открытую вкладку и закрыть старую / оригинальную вкладку.

1 Ответ

1 голос
/ 26 мая 2019

Следующее работает для меня, когда вы используете switchToNextWindow, а затем вы снимаете 1 с текущего количества окон (вы можете сначала проверить больше .windows.count> 1) и закрываете этот элемент в коллекции Windows.

Вы также можете .SwitchToWindowByName и .SwitchToWindowByTitle, если любой из них известен заранее | можно извлечь из текущей страницы.

'Ensure latest applicable driver e.g. ChromeDriver.exe in Selenium folder
'VBE > Tools > References > Add reference to selenium type library
Public Sub Example()
    Dim d As WebDriver
    Set d = New ChromeDriver
    Const URL = "https://www.cuponation.com.sg/agoda-discount-code"

    With d
        .get URL
        Debug.Print .Window.Title
        .FindElementByCss(".go").Click
        .SwitchToNextWindow
        Debug.Print .URL   '<= includes voucher code
        'do something with new window
        Debug.Print .Window.Title
        .Windows.item(.Windows.Count - 1).Close 'close prior window
        Debug.Print .Window.Title
        Stop
        .Quit
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...