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

Python+Selenium自动化中Headless模式突然失效求助

解决Headless模式下Undetected Chromedriver无法运行的问题

问题描述

我有一个基于Selenium的Python自动化应用,此前运行完全正常,但近日突然无法工作。经调试发现,移除Headless参数后脚本可正常运行,但我希望保留该参数以实现浏览器无界面运行,恳请帮助。

原代码

from selenium.webdriver.chrome.service import Service; 
import undetected_chromedriver as uc;
import time;
import os; 

chrome_options = uc.ChromeOptions();
chrome_options.add_argument("--disable-dev-shm-usage"); 
chrome_options.add_argument("--window-size=1920,1080"); 
chrome_options.add_argument("--disable-automation"); 
chrome_options.add_argument("--disable-extensions"); 
chrome_options.add_argument("--disable-gpu"); 
chrome_options.add_argument("--no-sandbox"); 
chrome_options.add_argument("--headless"); 
chrome_options.add_argument("--kiosk"); 

chrome_options.binary_location = os.environ.get("GOOGLE_CHROME_BIN");
service = Service(executable_path=os.environ.get("CHROMEDRIVER_PATH"));
driver = uc.Chrome(options=chrome_options, service=service);
driver.get('https://www.google.com/');

print(driver.page_source);

解决方案

问题出在旧版Headless模式的兼容性和参数冲突上,按以下步骤修改即可:

  • 替换Headless参数:Chrome 112及以上版本推出了全新的Headless模式,旧的--headless参数和真实浏览器行为差异大,容易被检测或启动失败,换成--headless=new能解决大部分兼容性问题。
  • 移除冲突参数:--kiosk是强制全屏的自助服务模式,和Headless模式搭配会产生冲突,直接删除该参数。
  • 添加自定义UA(可选):部分网站会识别Headless模式的默认User-Agent,手动设置一个正常浏览器的UA能进一步降低被检测概率。

修改后的代码

from selenium.webdriver.chrome.service import Service
import undetected_chromedriver as uc
import os

chrome_options = uc.ChromeOptions()
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_argument("--window-size=1920,1080")
chrome_options.add_argument("--disable-automation")
chrome_options.add_argument("--disable-extensions")
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--no-sandbox")
# 启用新版Headless模式
chrome_options.add_argument("--headless=new")
# 设置正常浏览器的User-Agent
chrome_options.add_argument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36")

chrome_options.binary_location = os.environ.get("GOOGLE_CHROME_BIN")
service = Service(executable_path=os.environ.get("CHROMEDRIVER_PATH"))
driver = uc.Chrome(options=chrome_options, service=service)
driver.get('https://www.google.com/')

print(driver.page_source)
# 退出驱动避免资源占用
driver.quit()

这些调整让undetected-chromedriver在无界面模式下更贴近真实浏览器行为,既能保留Headless特性,又能解决启动失败的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 17:32:44