写脚本自动帮机器装个 Chrome 插件——听着简单。Chrome 团队故意不让你静默装本地 crx(安全策略,不是技术问题)。想绕开有几条现实可行的路。
路线一:企业策略强制安装(Web Store 上架的插件)
Chrome 支持通过 Windows 注册表 / macOS plist / Linux JSON 策略,指定”必须自动装某扩展”。这是 IT 部门批量部署的标准做法。
前提是扩展在 Chrome Web Store 上架——策略只接受 update URL 拉取,不认本地 crx。
Windows 注册表方式
import winreg
EXT_ID = "aapocclcgogkmnckokdopfmhonfmgoek" # 举例:Google Docs Offline
UPDATE_URL = "https://clients2.google.com/service/update2/crx"
path = r"SOFTWARE\Policies\Google\Chrome\ExtensionInstallForcelist"
key = winreg.CreateKey(winreg.HKEY_LOCAL_MACHINE, path)
winreg.SetValueEx(key, "1", 0, winreg.REG_SZ, f"{EXT_ID};{UPDATE_URL}")
winreg.CloseKey(key)
写完重启 Chrome,扩展会自动安装、无法卸载。
注意:
- 需要管理员权限
ExtensionInstallForcelist的编号("1"、"2"…)要不重复- 只支持 Web Store 上架的扩展;企业内部扩展需要自建
update.xml
配套删除:
import winreg
key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, path, 0, winreg.KEY_WRITE)
winreg.DeleteValue(key, "1")
路线二:Selenium 启动时加载本地插件
不做正式安装,只是启动 Chrome 时把插件目录加载进来——最适合自动化脚本、爬虫、批量测试。
加载解压后的目录(源码形式):
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
opts = Options()
opts.add_argument(r"--load-extension=D:\extensions\my-plugin")
driver = webdriver.Chrome(options=opts)
driver.get("https://example.com")
加载已打包的 crx:
opts = Options()
opts.add_extension(r"D:\extensions\my-plugin.crx")
局限:
- 不会真的”安装”,关闭浏览器就没了
- 需要 Selenium 控制的 Chrome,不影响用户日常浏览器
- Chrome 每次启动会有”以开发者模式使用未打包扩展”警告条
路线三:Playwright 加载扩展
Playwright 加载扩展要用 persistent context,且必须用 Chromium(Chrome 分发版不能通过所有测试):
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
ctx = p.chromium.launch_persistent_context(
user_data_dir="D:/tmp/pw-profile",
headless=False,
args=[
"--disable-extensions-except=D:\\extensions\\my-plugin",
"--load-extension=D:\\extensions\\my-plugin",
],
)
page = ctx.new_page()
page.goto("https://example.com")
不推荐的路线
UI 自动化拖 crx 到 chrome://extensions/:Chrome 会弹确认框、快捷键会变、chrome 版本升级后经常挂。别在这个方向上死磕。
改本地 Extensions 目录里的 Preferences JSON:Chrome 会检测校验和,第二次启动直接把你写进去的扩展禁用掉。
场景对应
| 目的 | 用什么 |
|---|---|
| 公司/网吧批量部署 Web Store 扩展 | 策略强制安装 |
| 爬虫 / 自动化脚本用自己写的扩展 | Selenium 加载 |
| 需要长期挂着扩展,用户不能卸载 | 策略强制 |
| 只是测试自己开发中的插件 | Chrome 开发者模式手动 |
一句话总结
要”真安装”就上企业策略(Web Store 扩展),要”临时加载”就 Selenium/Playwright --load-extension。Chrome 就是不让你静默装本地 crx,别硬撞。
