使用Selenium在Opera浏览器中实现新标签页打开切换的代码如何编写?
Selenium + Opera 标签页切换实现方案
前置依赖
- 推荐使用 Selenium 4.x 版本,可自动匹配对应Opera版本的驱动,无需手动下载配置
- Selenium 3.x版本需要手动下载和本地Opera浏览器版本匹配的OperaDriver后再使用
完整实现代码
from selenium import webdriver from selenium.webdriver.opera.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 配置Opera浏览器选项 opera_options = Options() # 如需无头模式运行可去掉下方注释 # opera_options.add_argument('--headless=new') # 初始化Opera驱动 driver = webdriver.Opera(options=opera_options) # 设置全局隐式等待时长,可根据自身需求调整 driver.implicitly_wait(10) # 保存初始标签页句柄,后续需要返回初始页时可直接调用 original_window = driver.current_window_handle # 待爬取的目标链接列表,替换为你自己的链接即可 target_urls = [ "https://example.com/1", "https://example.com/2", "https://example.com/3" ] for url in target_urls: # 通过JS打开新标签页,比点击元素触发新标签的逻辑更稳定,避免特殊字符报错 driver.execute_script("window.open(arguments[0]);", url) # 切换到最新打开的标签页:新标签页默认在句柄列表的最后一位 driver.switch_to.window(driver.window_handles[-1]) # ------------------ 下方编写你的元素检测、爬取逻辑 ------------------ # 示例:等待指定ID的元素加载完成 WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "target_element_id"))) # 你的自定义逻辑 # ------------------------------------------------------------------- # 【可选】处理完当前标签页后关闭该标签,避免打开过多标签占用资源 driver.close() # 切回初始标签页,准备打开下一个链接 driver.switch_to.window(original_window) # 所有链接处理完成后退出浏览器 driver.quit()
注意事项
- 不要使用
driver.get()打开新链接,该方法会直接在当前标签页加载目标地址,不会生成新标签 - 如果需要保留所有标签页后续统一处理,去掉循环内的
driver.close()和切回初始页的代码即可,后续可以通过driver.switch_to.window(driver.window_handles[索引])切换到对应标签页,索引从0开始计数,0为初始标签页,1为第一个打开的新标签,以此类推 - 如果出现句柄获取异常,可在执行
window.open后添加0.5秒左右的强制等待,确保标签页加载完成后再获取句柄 - 上述逻辑同样适用于Chrome、Edge等Chromium内核浏览器,仅需修改对应驱动的初始化配置即可
内容的提问来源于stack exchange,提问作者Coder
相关产品推荐
相关产品推荐

