能否在Headless Chromium中通过Puppeteer运行Tampermonkey脚本?若可行该如何操作?
在Headless Chromium中通过Puppeteer运行Tampermonkey脚本
完全可以实现。Puppeteer支持加载Chrome扩展,Tampermonkey作为用户脚本管理扩展,能在Headless Chromium环境中正常运行,你可以通过Puppeteer控制脚本的注入与执行流程。
具体操作步骤
1. 获取Tampermonkey扩展文件
先拿到Tampermonkey的CRX格式扩展包,可从Chrome应用商店下载对应版本,或从官方渠道获取可靠的扩展文件。
2. 配置Puppeteer启动参数
启动Puppeteer时必须指定加载Tampermonkey扩展,并启用新版Headless模式(旧版Headless不支持扩展加载),示例代码如下:
const puppeteer = require('puppeteer'); const path = require('path'); (async () => { // 替换为你的Tampermonkey CRX文件绝对路径 const tampermonkeyPath = path.resolve('./tampermonkey.crx'); const browser = await puppeteer.launch({ headless: 'new', // 必须使用新版Headless模式 args: [ `--disable-extensions-except=${tampermonkeyPath}`, `--load-extension=${tampermonkeyPath}`, '--no-sandbox', // 解决部分环境权限问题,可选 '--disable-setuid-sandbox' ] }); const page = await browser.newPage(); // 3. 注入并运行自定义Tampermonkey脚本 const userScript = ` // ==UserScript== // @name 测试脚本 // @namespace http://tampermonkey.net/ // @version 0.1 // @description 在Puppeteer环境运行的Tampermonkey脚本 // @author 你 // @match https://example.com/* // @grant none // ==/UserScript== (function() { 'use strict'; console.log('Tampermonkey脚本已执行!'); // 自定义脚本逻辑,比如修改页面背景色 document.body.style.backgroundColor = '#e6f7ff'; })(); `; // 将脚本注入页面 await page.evaluate((script) => { // 优先用Tampermonkey官方API添加脚本 if (typeof GM_addScript === 'function') { GM_addScript(script); } else { // 若Tampermonkey未完全加载,直接注入脚本到页面 const scriptEl = document.createElement('script'); scriptEl.textContent = script; document.head.appendChild(scriptEl); } }, userScript); // 访问目标页面触发脚本执行 await page.goto('https://example.com'); await page.waitForTimeout(3000); // 等待脚本执行完成 await browser.close(); })();
3. 关键注意事项
- 新版Headless模式:必须设置
headless: 'new',旧版headless: true不支持扩展加载。 - CRX路径正确性:确保CRX文件路径为绝对路径,避免加载失败。
- Tampermonkey API权限:如果脚本需要使用
GM_getValue、GM_xmlhttpRequest等API,需在脚本的@grant字段中声明对应权限,否则API会失效。 - 反爬适配:部分网站会检测Headless环境,可通过设置
userAgent、启用JavaScript等参数规避检测。
内容的提问来源于stack exchange,提问作者3jay1
相关产品推荐
相关产品推荐

