python - 如何关闭一个选项卡,然后使用 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()
最后,它单击打开一个新选项卡的内容。我想关闭新标签并继续使用原始标签
解决方案
要关闭新选项卡并继续使用原始选项卡,您必须:
- 切换到新选项卡,为和引入WebDriverWait。
number_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
推荐阅读
- excel - Excel工作表参考公式
- python - 在jinja2中设置select的默认值并在刷新页面后显示
- c++ - 如果头文件已经包含在预编译头文件中,我是否应该继续在我的源文件中包含头文件?
- php - 运行 PHP 脚本以插入数据库
- javascript - 编写高阶箭头函数
- selenium-webdriver - 无法在下拉列表中选择元素,因为元素不可交互
- rust - 生成模块功能文档,如结构方法
- javascript - 多个 div 跟随鼠标的工具提示
- matlab - 如何使用 POS 标签作为特征
- batch-file - 如何在不知道该文件的完整路径的情况下使用批处理脚本复制文件?