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

Python Selenium调用JavaScript打开新标签页突然失效问题排查

故障原因
  • 版本适配问题:Chrome浏览器自动更新后,与当前使用的chromedriver版本不匹配,会导致各类原生操作、JS执行出现无响应、异常的情况,你此前遇到的浏览器自动关闭、现在的新标签页打开失败都属于这类问题的典型表现。
  • 弹窗拦截限制:浏览器默认会拦截非用户手动触发的window.open弹窗请求,代码通过Selenium执行的JS调用不属于用户交互触发的行为,很容易被拦截策略阻止。
  • 页面状态异常:执行window.open时,登录后的页面还未完成完全加载、或者页面存在未捕获的JS报错,都会导致插入的JS代码无法正常执行。
排查调试步骤
  1. 首先校验版本匹配度
    打开Chrome浏览器访问chrome://version/查看当前浏览器的大版本号,再右键点击你使用的chromedriver_new.exe,在属性详情页查看版本号,二者的大版本号(比如主版本号118、119)必须完全一致,若不匹配请下载对应版本的chromedriver替换。

  2. 新增禁用弹窗拦截启动参数
    在Options配置中添加弹窗拦截禁用参数,避免JS打开新窗口被拦截:

opt.add_argument("--disable-popup-blocking")
  1. 捕获JS执行的报错信息
    修改window.open的执行代码,捕获JS层面的报错,确认是否是执行过程中出现异常:
exec_res = driver.execute_script("""
try {
    window.open(arguments[0], '_blank');
    return 'ok';
} catch(err) {
    return 'error: ' + err.toString();
}
""", img_url)
print("JS执行结果:", exec_res)
# 执行前后打印窗口句柄数量确认是否新增
print("执行前窗口数:", len(driver.window_handles))
driver.execute_script('window.open(arguments[0],"_blank");',img_url)
print("执行后窗口数:", len(driver.window_handles))
  1. 替换为Selenium原生的新标签页打开方式
    如果你使用的是Selenium 4及以上版本,直接用原生的新窗口API打开新标签页,稳定性远高于JS调用:
# 新建标签页并自动切换
driver.switch_to.new_window('tab')
# 访问目标图片地址
driver.get(img_url)
  1. 替换固定等待为显式等待
    不要用time.sleep等待页面加载,在login函数执行完成后,加显式等待确认登录后的页面元素已加载完成,再执行后续的新标签页打开操作,避免页面未就绪导致的JS执行失效。

内容的提问来源于stack exchange,提问作者Gustavo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 22:06:03