Python中selenium+chrome在headless模式下启动慢的原因是什么?

        options = webdriver.ChromeOptions()
        options.add_argument('--headless')
        options.add_argument('--disable-gpu')
        # driver = webdriver.Chrome()
        driver = webdriver.Chrome(options=options)
        # driver.maximize_window()
    # 清除浏览器 cookies
    # cookies = driver.get_cookies()
    # print(f"main: cookies = {cookies}")
    # driver.delete_all_cookies()

    driver.get(TarGeturl)
    print("Get OK")

这个问题有人曾经问过( https://www.v2ex.com/t/514156),
但是没解决问题的方法。。。
现在我也遇上了这个问题,也尝试过把 driver.chrome()的 cookies,缓存什么的都清干净了,
如果不用 headless 模式,页面几乎是瞬间获取到了,drivers.chrome()有 bug?
大家有遇到过这种情况么?


Python中selenium+chrome在headless模式下启动慢的原因是什么?

2 回复

headless模式启动慢通常是因为Chrome在无头状态下会默认加载一些不必要的组件和功能。

主要原因有这几个:

  1. 沙箱和安全功能:headless模式下Chrome仍然会初始化沙箱和安全服务,这些在服务器环境里可能没必要。
  2. GPU和渲染管线:即使不显示,Chrome还是会尝试初始化GPU相关组件。
  3. 默认功能加载:像蓝牙、USB设备检测这些功能在无头模式下完全用不上。
  4. 用户数据目录:每次启动都创建新的临时用户目录会有开销。

用下面这个配置能明显加快启动速度:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--headless=new")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--disable-software-rasterizer")
chrome_options.add_argument("--disable-features=VizDisplayCompositor")
chrome_options.add_argument("--disable-blink-features=AutomationControlled")
chrome_options.add_argument("--disable-extensions")
chrome_options.add_argument("--disable-setuid-sandbox")
chrome_options.add_argument("--memory-pressure-off")
chrome_options.add_argument("--disable-background-networking")

# 最关键的是禁用不必要的服务
chrome_options.add_experimental_option("excludeSwitches", ["enable-automation"])
chrome_options.add_experimental_option("useAutomationExtension", False)

# 预定义用户数据目录避免每次创建
chrome_options.add_argument("--user-data-dir=/tmp/chrome_user_data")

driver = webdriver.Chrome(options=chrome_options)

核心就是关掉所有用不着的功能,特别是--disable-gpu和排除自动化开关对启动速度影响最大。

一句话总结:关掉不必要的Chrome功能能显著提升headless启动速度。


我是 chrome75 版本都正常,升级到 77,78 后。处理第一次启动(设置 user-dir 时候)超快,后面都要 20~30 秒。疯了,删掉 user-dir 目录,让 chrome 从干净系统启动又正常。

回到顶部