无头模式下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
相关产品推荐
相关产品推荐

