当前位置: 首页 > 知识库问答 >
问题:

Selenium Basic VBA聚焦于通过单击打开的新选项卡

翟单弓
2023-03-14

我正在处理用于Excel VBA的Selenium Basic Wrapper,但是在单击打开新选项卡的按钮时,我无法让Selenium Web驱动程序将焦点切换到打开的新选项卡上,并关闭原始选项卡。我相信使用Java Selenium应该可以实现这一点,但是有没有办法通过excel VBA上的Selenium基本包装来实现呢?

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个答案

陆敏学
2023-03-14

下面的方法适合我,您使用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
 类似资料:
  • 您好,我正在使用selenium单击链接,通常使用在线web应用程序。 当我单击打开新选项卡的特定链接并在新打开的选项卡中执行操作时,我会遇到问题。我有以下代码: 之后,网络驱动程序(从我的眼睛)打开到新标签,而我不必调用 所以一切都好。新标签会在WebDrive上打开。当我尝试单击新打开的选项卡上的链接时,我得到一个“无元素”异常,这意味着它找不到我要找的元素。 两个问题: 1) webdriv

  • 所以问题是,selenium在page1中搜索特定的项目。然后它点击它,根据网站的设计,它在一个新的标签中打开page2。如何让selenium跟随单击并在新选项卡上工作? 我虽然使用美丽的汤只是复制从page1的网址,但网站没有显示网址。相反,它显示了获取URL的函数。真的很奇怪,也很混乱。想法?

  • 出于自动化的目的,我正在创建一个在表中查找一行的脚本。此行是可单击的,并打开一个新的选项卡/地址。 使用selenium,我现在可以找到表行,单击链接,然后打开新的选项卡。问题是我找不到任何方法将焦点切换到新打开的选项卡。我试图获得所有的windowhandle,看看我是否可以切换,但即使在新标签打开后,只有一个windowhandle。 Arraylist始终包含1个windowHandle,而

  • 问题内容: 在这种情况下有人可以帮助我吗: 方案是: 有一个网页,并且仅在新选项卡中打开所有指定的链接。现在,我试图单击新打开的选项卡中的任何一个链接。在下面尝试过,但是只单击了主/第一个选项卡中的一个链接,而不是新选项卡中的链接。 问题答案: 您将需要使用命令来访问第二个选项卡。 在打开第二个选项卡之前-获取打开的选项卡的windowHandle: 然后执行打开第二个选项卡的操作。现在,您需要知

  • 作为我程序的一部分,我需要有一个按钮,当用户单击它时,它会打开一个新窗口。 嗯,我想我应该有一个类来创建框架并按按钮调用它。但我不知道该怎么开始。我刚刚在程序中找到了我的按钮,但它不起作用。有人能告诉我怎么做吗?或对其进行编码。