【问题标题】:How can I close a tab then go to the other tab with selenium?如何关闭一个选项卡,然后使用 selenium 转到另一个选项卡?
【发布时间】:2020-04-13 23:13:07
【问题描述】:

这是一个示例脚本:

from selenium import webdriver

driver = webdriver.Firefox()

driver.get('https://www.startpage.com/en/')

driver.find_element_by_xpath('//*[@id="query"]').send_keys('Example')

driver.find_element_by_xpath('/html/body/div[1]/main/div[1]/section/div[1]/div[1]/form/button[2]/span[2]').click()

driver.find_element_by_xpath('/html/body/div[2]/div/div[2]/div[1]/div[2]/div[1]/div/section[5]/div[1]/a/h3').click()

最后,它点击打开一个新标签的东西。我想关闭新标签并继续使用原始标签

【问题讨论】:

  • 文档中没有介绍吗?
  • @AMC 最有可能,但我在文档中的任何地方都找不到它

标签: python selenium selenium-webdriver window-handles


【解决方案1】:

driver.window_handles 是浏览器标签的对象。

假设您要关闭第二个标签(新标签),这可行。

# continue from your code
driver.switch_to.window(driver.window_handles[1])
driver.close()

只需将 window_handles[i] 的 i 更改为其他选项卡即可。

【讨论】:

    【解决方案2】:

    要关闭新标签并继续使用原始标签,您必须:

    • 切换到新标签页,为number_of_windows_to_be(2)close() 引入WebDriverWait
    • 切换回父标签。

      • 代码块:

        from selenium import webdriver
        from selenium.webdriver.support.ui import WebDriverWait
        from selenium.webdriver.common.by import By
        from selenium.webdriver.support import expected_conditions as EC
        
        options = webdriver.ChromeOptions() 
        options.add_argument("start-maximized")
        options.add_experimental_option("excludeSwitches", ["enable-automation"])
        options.add_experimental_option('useAutomationExtension', False)
        driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
        
        driver.get('https://www.startpage.com/en/')
        print("Initial Page Title is : %s" %driver.title)
        windows_before  = driver.current_window_handle
        print("First Window Handle is : %s" %windows_before)
        WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.search-form__input"))).send_keys("Example")
        driver.find_element_by_css_selector("span.search-form__button-icon").click()
        WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//h3[@class='w-gl__label']//following::h3[1]"))).click()
        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)
        print("Page Title after Tab Switching is : %s" %driver.title)
        print("Second Window Handle is : %s" %new_window)
        driver.close()
        driver.switch_to.window(windows_before)
        print("Page Title after second Tab Switching is : %s" %driver.title)
        print("Current Window Handle is : %s" %windows_before)
        
      • 控制台输出:

        Initial Page Title is : Startpage.com - The world's most private search engine
        First Window Handle is : CDwindow-18CCC5501A5F68CBE1C3094D0D0B419D
        Page Title after Tab Switching is : YouTube
        Second Window Handle is : CDwindow-2EDCAB04A232660E8BCBD7A079DE574B
        Page Title after second Tab Switching is : Startpage.com Search results
        Current Window Handle is : CDwindow-18CCC5501A5F68CBE1C3094D0D0B419D
        

    您可以在Open web in new tab Selenium + Python找到相关的详细讨论

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-28
      • 2014-02-05
      • 2013-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多