Selenium WebDriver加载URL速度极慢,寻求优化建议(2022款Mac)
Selenium在Mac上启动&加载URL过慢的优化方案
你的核心耗时点分为两部分:ChromeDriverManager().install()每次运行的驱动检查下载,以及浏览器启动和页面加载的冗余开销。以下是针对性优化方案:
1. 消除ChromeDriver动态安装的耗时
每次调用ChromeDriverManager().install()都会检查并下载驱动,直接预安装驱动到本地即可节省这5秒:
- 手动下载与本地Chrome版本匹配的ChromeDriver,放到系统PATH目录(如
/usr/local/bin/) - 修改代码跳过动态安装,直接指定本地驱动路径:
service = ChromeService(executable_path='/usr/local/bin/chromedriver')
2. 组合更有效的Chrome启动参数
整合优化参数,针对Mac环境添加更高效的配置:
options = webdriver.ChromeOptions() # 基础性能优化 options.add_argument('--disable-gpu') options.add_argument('--disable-extensions') options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') options.add_argument('--headless=new') # 新版无头模式,性能优于旧版headless options.add_argument('--blink-settings=imagesEnabled=false') # 直接禁用图片加载 # Mac特定优化 options.add_argument('--disable-background-networking') # 关闭后台网络请求 options.add_argument('--disable-default-apps') # 禁用默认应用加载 options.add_argument('--disable-features=VizDisplayCompositor') # 禁用渲染合成器 options.add_argument('--log-level=3') # 仅输出致命错误,减少日志开销 options.add_argument('--silent') # 静默启动,避免不必要的输出
3. 修改页面加载策略
默认的normal策略会等待页面完全加载,改用eager只等待DOM加载完成,或none直接跳过等待(需自行判断元素状态):
options.page_load_strategy = 'eager'
4. 系统层面检查
- 确保Chrome为最新版本,避免与Mac系统(Ventura/Sonoma)的兼容性问题
- 再次确认系统设置-网络-高级-代理中,所有自动代理选项已关闭
- 临时关闭杀毒软件/防火墙,排查是否存在网络拦截
优化后完整代码
from selenium import webdriver from selenium.webdriver.chrome.service import Service as ChromeService import time start_time = time.time() url = 'https://www.google.com' # 配置Chrome优化选项 options = webdriver.ChromeOptions() options.add_argument('--disable-gpu') options.add_argument('--disable-extensions') options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') options.add_argument('--headless=new') options.add_argument('--blink-settings=imagesEnabled=false') options.add_argument('--disable-background-networking') options.add_argument('--disable-default-apps') options.add_argument('--disable-features=VizDisplayCompositor') options.add_argument('--log-level=3') options.add_argument('--silent') options.page_load_strategy = 'eager' # 使用本地预安装的ChromeDriver service = ChromeService(executable_path='/usr/local/bin/chromedriver') driver = webdriver.Chrome(service=service, options=options) driver.get(url) print("hi") print("--- %s seconds ---" % (time.time() - start_time)) driver.quit() # 关闭驱动,避免残留进程
内容的提问来源于stack exchange,提问作者ichino
相关产品推荐
相关产品推荐

