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

Selenium开关选项卡

吴炎彬
2023-03-14

由于Firefox不再支持Control+T选项卡,我开始使用driver.execute_script(“window.open('url','new_window')”)

我正在尝试显示我打开的不同选项卡的标题,并在它们之间切换。对于下面的示例,我期望输出是facebook、google和返回到facebook。现在的输出是facebook、facebook、facebook.

我尝试了从这里的答案,但它也没有工作:切换回父选项卡使用selenium webdriver

from selenium import webdriver

driver = webdriver.Firefox()
driver.get("http://www.facebook.com/")
print(driver.title)

driver.execute_script("window.open('http://google.com', 'new_window')")
print(driver.title)

driver.switch_to.window(driver.window_handles[0])
print(driver.title)

更新了:我试了下面的代码,它仍然没有工作。

from selenium import webdriver

driver = webdriver.Firefox()
driver.get("http://www.facebook.com/")
print(driver.title)
window_before = driver.window_handles[0]

driver.execute_script("window.open('http://google.com', 'new_window')")
window_after = driver.window_handles[1]
driver.switch_to.window(window_after)
print(driver.title)

共有1个答案

姜弘新
2023-03-14

关于选项卡/窗口切换/处理的几句话:

>

  • 始终跟踪父窗口句柄,以便以后根据您的使用情况,如果需要,可以返回。

    在选项卡/窗口之间切换之前,始终使用带有expected_conditions的WebDriverWait作为number_of_windows_to_be(num_windows)

    下面是您自己的代码,上面提到了一些小调整:

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    driver = webdriver.Firefox(executable_path=r'C:\WebDrivers\geckodriver.exe')
    driver.get("http://www.facebook.com/")
    print("Initial Page Title is: %s" %driver.title)
    windows_before  = driver.current_window_handle
    driver.execute_script("window.open('http://google.com')")
    WebDriverWait(driver, 10).until(EC.number_of_windows_to_be(2))
    windows_after = driver.window_handles
    new_window = [x for x in windows_after if x != windows_before][0]
    driver.switch_to.window(new_window)
    WebDriverWait(driver, 20).until(EC.title_contains("G"))
    print("Page Title after first window switching is: %s" %driver.title)
    driver.close()
    driver.switch_to.window(windows_before)
    WebDriverWait(driver, 20).until(EC.title_contains("F"))
    print("Page Title after second window switching is: %s" %driver.title)
    driver.quit()
    

    控制台输出:

    Initial Page Title is: Facebook – log in or sign up
    Page Title after first window switching is: Google
    Page Title after second window switching is: Facebook – log in or sign up
    

  •  类似资料:
    • 因此,我有一个,我想冲浪到新选项卡中,链接是不可点击的,所以当我点击这个链接时,什么也不会发生,这将不起作用(甚至不手动): 这是我的web URL:

    • 下面的示例有一个名为London的选项卡,其中有另一个名为Paris的选项卡。我怎么能在伦敦不结帐的情况下打开巴黎? 该示例直接来自W3SCHOOL,但经过了一些修改以适应我的用例。 null null 我相信问题是,“活跃”班从伦敦消失,因此,一旦我向巴黎施压,就会关闭。但我不擅长jQuery。 我想它可以很容易地在W3接口上测试:https://www.w3schools.com/howto/

    • 我在Windows上使用Python 2.7中的Firefox Webdriver来模拟打开(Ctrl+T)和关闭(Ctrl+W)一个新选项卡。 如何在Mac上实现同样的功能?根据这个注释,我们应该使用打开一个新的选项卡,但是我没有Mac来测试它,那么的等效项呢? 谢了!

    • 问题内容: 我正在使用Python。我正在尝试在Chrome上打开两个标签,每个标签都指向不同的网站。这是我的代码: 当我运行它时,第一个标签页打开到reddit.com,然后另一个标签页打开到我的默认网页,然后在原始标签页中打开bing.com。我希望第一个选项卡转到Reddit,第二个选项卡转到bing,但仅作用于第一个选项卡。 问题答案: 像这样为python尝试:

    • 所以我试图在我的WebDriver中打开新的标签页。我想这样做,因为打开一个新的WebDriver为每个网站使用PhantomJS约3.5秒,我想要更快... 我使用的是一个多进程python脚本,我希望从每个页面中获取一些元素,因此工作流如下所示:

    • 我在Ubuntu14.04中从事Selenium和Firefox的工作,我通过send_keys(Keys)创建了一个新的选项卡。CONTROL 't '),但是一直在第一个选项卡上发出命令,可能是因为我没有正确地关注新选项卡。 运行此代码时没有错误。 去google.com后,我创建了一个新标签,屏幕在新标签上变成了一个空白页。之后,我编写了driver . switch _ to _ wind