Python无头Chrome配置选项及GPU初始化报错问题咨询
无头ChromeGPU初始化报错的成因与解决方案
报错成因
控制台输出的[gpu_init.cc(426)] Passthrough is not supported, GL is swiftshader不属于功能性错误,是Chrome 100以上正式版本在无GPU环境运行的固有日志:
- 哪怕配置了
--disable-gpu参数,无头模式下Chrome仍会在启动阶段走一遍GPU能力校验流程 - 容器、无外接显示器的服务器这类环境,本身没有支持直通的硬件GPU,Chrome会自动切换到SwiftShader软件渲染管线完成页面渲染
- 这个切换过程会强制输出ERROR级别日志,和参数是否生效无关,即便脚本运行完全正常,日志也会照常打印
之前尝试单独用--disable-gpu消日志没有效果,是因为该参数仅负责跳过真实硬件GPU的调用逻辑,没法屏蔽校验流程触发的日志上报。另外配置的--log-level=3本应屏蔽ERROR级别日志,但该gpu_init模块的报错在多数Chrome版本中属于绕过日志等级控制的强制stderr输出,因此单独调整日志等级参数没法消掉该提示。
消日志的有效配置
在原有启动参数基础上补充一个GPU流程控制参数,即可从根源上跳过触发该报错的校验环节:
- 新增参数
--use-gl=swiftshader:启动阶段直接声明使用SwiftShader软件渲染,不再做“Passthrough模式是否支持”的前置校验,自然不会触发对应报错
调整后的完整配置示例:
chrome_options = webdriver.ChromeOptions() prefs = {"profile.default_content_setting_values.notifications": 2} chrome_options.add_experimental_option("prefs", prefs) chrome_options.add_argument('headless') chrome_options.add_argument("window-size=1080,1920") chrome_options.add_argument("--disable-gpu") chrome_options.add_argument("--use-gl=swiftshader") chrome_options.add_argument("--log-level=3") chrome_options.add_argument("--no-sandbox") chrome_options.add_argument("--disable-dev-shm-usage")
补充说明
- 启动时输出的
DevTools listening on ws://xxx是Chrome内置调试通道的启动提示,属于正常输出,不影响功能。如需过滤这类日志,可以在启动webdriver时将日志输出流重定向到空设备,无需修改Chrome启动参数 - 不要为了清理日志强行添加参数关闭全部渲染相关流程,否则会出现页面元素定位不准、截图空白等功能性异常
内容的提问来源于stack exchange,提问作者Leslie Alldridge
相关产品推荐
相关产品推荐

