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

Selenium启动的Chrome手动操作极慢,M1 Mac下如何优化?

Selenium启动的Chrome在M1 Mac上卡顿的原因及解决方法

问题背景

我开发了一个脚本,自动登录Memrise词汇学习应用,为每个课程打开标签页,检查是否有剩余词汇需要复习:有则启动复习会话,无则关闭标签页。功能已实现,但Selenium启动的Chrome在手动操作时异常卡顿——比如输入内容要约5秒才显示,即使脚本执行完毕、保留驱动供手动复习时,浏览器依然不流畅。在活动监视器中发现:正常Chrome以Apple架构运行,而Selenium启动的Chrome以Intel架构运行,怀疑这是卡顿的核心原因。

核心原因

没错,架构不匹配是主要问题:M1/M2 Mac采用ARM架构,若Selenium调用的ChromeDriver是Intel版本,浏览器会通过Rosetta 2转译运行,转译过程会带来大量性能损耗,直接导致操作卡顿。此外,Selenium默认的启动参数未启用部分性能优化选项,也会加重卡顿问题。

解决方案

1. 安装适配Apple Silicon的Chrome与ChromeDriver

  • 确认Chrome版本:打开Chrome,点击菜单>关于Google Chrome,查看是否标注“Apple Silicon”。若为Intel版本,前往官网下载ARM版本重新安装。
  • 安装对应ARM版本的ChromeDriver:
    • 查看Chrome的具体版本号,下载匹配的ARM64驱动;
    • 或通过Homebrew安装:brew install chromedriver(M1/M2上的Homebrew默认安装ARM架构软件)。

2. 优化Chrome启动参数

在初始化ChromeOptions时,添加性能优化参数,减少不必要的资源占用:

options = webdriver.ChromeOptions()
prefs = {
        "download.default_directory" : download_dir,
        'intl.accept_languages': 'en,en_US'
        }
options.add_experimental_option("prefs", prefs)
options.add_experimental_option("detach", True)
options.add_experimental_option("useAutomationExtension", False)
options.add_experimental_option("excludeSwitches", ["enable-automation", "enable-logging"])
# 性能优化参数
options.add_argument("--disable-extensions")
options.add_argument("--disable-gpu")
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--disable-background-timer-throttling")
options.add_argument("--disable-backgrounding-occluded-windows")
options.add_argument("--disable-renderer-backgrounding")
# 若Chrome路径非默认,可手动指定Apple Silicon版本的Chrome二进制文件路径
# options.binary_location = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
driver = webdriver.Chrome(options=options)
driver.maximize_window()

3. 验证架构匹配

启动脚本后,打开活动监视器,查看Selenium启动的Chrome进程,确认“种类”列显示为“Apple”而非“Intel”,说明架构匹配成功。

额外优化建议

  • 避免批量打开标签页:一次性打开多个标签页会占用大量内存,可改为逐个处理课程,完成一个再打开下一个;
  • 替换废弃API:switch_to_window已被废弃,建议使用driver.switch_to.window(remaining_window_handles[0]);
  • 优化等待逻辑:用visibility_of_element_located代替presence_of_element_located,确保元素可见且可交互后再操作,减少无效等待。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 22:15:35