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
相关产品推荐
相关产品推荐

