You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 05:45:40