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

无头模式下Selenium ChromeDriver点击按钮无法打开新标签页求助

问题

网站上存在一个按钮,点击后会打开新标签页。该功能在Chrome正常模式下可正常工作,但在无头模式下无法打开新标签页。

代码示例:

driver_app.find_element(By.XPATH, "//XPATH_FOR_EXAMPLE").click()
time.sleep(60) # 示例等待时间
tabs = driver_app.window_handles  # 无头模式下始终为1,正常模式下始终为2

使用版本:chromedriver 107.0.5304.62、chrome 107.0.5304.107、selenium 4.1.0

手动在Mozilla Firefox中点击该按钮会看到弹窗拦截警告,但Chrome中无此提示。已尝试在Chrome选项中添加--disable-popup-blocking,也试过用JavaScript、Action Chains执行点击操作,均无效果——两种模式下window_handles的数量始终不同,求其他解决办法。

解决办法

  • 指定无头模式窗口尺寸:无头模式下Chrome默认窗口尺寸极小,部分网站会针对小窗口禁用新标签页跳转,添加以下参数:
    opts.add_argument("--window-size=1920,1080")
    
  • 启用新版无头模式:Chrome 96+支持更贴近正常浏览器行为的新无头模式,替换原有--headless参数:
    opts.add_argument("--headless=new")
    
  • 手动获取跳转链接并打开新标签页:如果上述方法无效,可直接提取按钮的跳转目标,再通过JS手动打开:
    # 获取按钮的href属性(若按钮直接通过href跳转)
    button = driver_app.find_element(By.XPATH, "//XPATH_FOR_EXAMPLE")
    link = button.get_attribute("href")
    
    # 若按钮通过JS触发跳转,可尝试解析onclick事件(需根据实际JS逻辑调整)
    # link = driver_app.execute_script("return arguments[0].onclick.toString().match(/window.open\\('(.*?)'\\)/)[1]", button)
    
    # 手动打开新标签页
    driver_app.execute_script(f"window.open('{link}');")
    time.sleep(2)
    tabs = driver_app.window_handles
    
  • 关闭浏览器安全限制(谨慎使用):添加参数禁用部分可能影响弹窗的安全设置,仅建议用于测试场景:
    opts.add_argument("--disable-web-security")
    opts.add_argument("--allow-running-insecure-content")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 15:00:49