使用Selenium批量打开URL新标签页:异常URL被覆盖问题求助
问题分析与解决方案
问题根源
你的代码逻辑是先访问URL,再为下一个URL创建新标签。如果某个URL访问失败(进入except块),不会执行创建新标签的操作,下一次循环会直接在当前标签访问下一个URL,导致覆盖。另外你的pages列表里第三个和第四个URL之间缺少逗号,会被合并成一个无效URL,这也是问题之一。
修正后的代码
核心思路是先为每个URL创建独立标签(第一个用初始窗口),再在对应标签内访问URL,确保每个URL都有专属标签,无论访问成功与否:
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service service = Service( "C:\\Users\\vbred\\Desktop\\Selenium with python\\Selenium\\chrome\\chromedriver_win32\\chromedriver.exe") chrome_options = Options() chrome_options.add_experimental_option("detach", True) driver = webdriver.Chrome(service=service, options=chrome_options) # 修复URL列表的逗号问题 pages = [ 'https://www.facebook.com/', 'https://www.commbank.com.au/', 'https://www.commbank.com', 'https://chercher.tech/python/windows-selenium-python' ] # 处理第一个URL:用初始窗口访问 try: driver.get(pages[0]) except Exception as e: print(f"访问 {pages[0]} 失败: {e}") # 处理剩余URL:先开新标签,再切换过去访问 for url in pages[1:]: # 先创建新标签 driver.execute_script("window.open('');") # 切换到新标签 driver.switch_to.window(driver.window_handles[-1]) # 在新标签里访问URL try: driver.get(url) except Exception as e: print(f"访问 {url} 失败: {e}") # 遍历所有窗口获取标题 for idx, handle in enumerate(driver.window_handles): driver.switch_to.window(handle) print(f"标签页 {idx+1} 标题: {driver.title}")
关键改动说明
- 拆分URL列表,修复缺失的逗号,避免无效URL生成
- 第一个URL直接用初始窗口访问,后续每个URL先创建新标签,再切换访问,确保每个URL对应独立标签
- 每个URL的访问逻辑都包裹在
try-except里,捕获错误但不影响后续标签创建流程 - 遍历窗口时直接用
enumerate处理窗口句柄,逻辑更简洁直观
内容的提问来源于stack exchange,提问作者Vijay
相关产品推荐
相关产品推荐

