首页 > 解决方案 > 如何关闭一个选项卡,然后使用 selenium 转到另一个选项卡?

问题描述

这是一个示例脚本:

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()

最后,它单击打开一个新选项卡的内容。我想关闭新标签并继续使用原始标签

标签: pythonseleniumselenium-webdriverwindow-handles

解决方案


要关闭新选项卡并继续使用原始选项卡,您必须:

  • 切换到新选项卡,为和引入WebDriverWaitnumber_of_windows_to_be(2)close()
  • 切换回父选项卡。

    • 代码块:

      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
      

您可以在新标签 Selenium + Python 中的 Open web 中找到相关的详细讨论


推荐阅读