使用Puppeteer时如何禁用Google Chrome安全浏览功能?
问题:Puppeteer自动化中禁用安全浏览以阻止密码泄露提示弹窗
我用Puppeteer自动化各类网页门户的用户操作流程,期间遇到因使用测试凭证而频繁弹出的密码泄露提示弹窗——该弹窗会直接打断脚本导致运行失败,且无头模式下很难排查出是这个弹窗引发的登录环节故障。
我知道在Chrome设置(chrome://settings/security)里禁用安全浏览(SafeBrowsing)能阻止弹窗,但这个设置对Puppeteer无效。查了Chrome命令行参数列表,没找到专门禁用该弹窗或完全关闭安全浏览的参数;Windows下通过组策略修改注册表的方案没法跨平台(需要支持macOS和Linux),而且不能依赖用户数据目录,得保证脚本在其他电脑及远程服务器的无头模式下都能正常运行。
以下是可复现问题的示例代码(核心是使用了数据泄露中的常见密码):
import puppeteer from 'puppeteer'; async function launchPuppeteer() { const browser = await puppeteer.launch({ defaultViewport: null, executablePath: '/path/to/chrome/executable', headless: false, args: [ /* Chrome command line args go here */ ] }); const page = await browser.newPage(); // use page here . . . }
请问是否存在Chrome命令行参数或Puppeteer内置功能,可用于禁用SafeBrowsing?
解决方案
有几个跨平台、不依赖用户数据目录的可行方案,可直接通过Puppeteer配置或Chrome命令行参数实现:
1. 用Chrome命令行参数彻底禁用安全浏览
将以下参数添加到args数组中,直接关闭Chrome的安全浏览模块,从根源上阻止密码泄露检测弹窗:
args: [ '--disable-safe-browsing', '--disable-features=SafeBrowsing,SafeBrowsingProtection' ]
2. 通过Puppeteer配置禁用密码管理功能
如果不想完全关闭安全浏览,可禁用Chrome的密码管理器,避免触发密码泄露检测:
async function launchPuppeteer() { const browser = await puppeteer.launch({ defaultViewport: null, executablePath: '/path/to/chrome/executable', headless: false, args: [] }); const page = await browser.newPage(); // 禁用密码保存及相关服务 await page.setUserPreferences({ 'profile.password_manager_enabled': false, 'credentials_enable_service': false }); // 后续操作... }
3. 监听并自动关闭弹窗(兜底方案)
如果以上方法失效,可通过Puppeteer的弹窗监听功能,自动关闭出现的密码泄露提示:
async function launchPuppeteer() { const browser = await puppeteer.launch({ defaultViewport: null, executablePath: '/path/to/chrome/executable', headless: false, args: [] }); const page = await browser.newPage(); // 监听弹窗事件,自动关闭密码泄露提示 page.on('dialog', async dialog => { const msg = dialog.message(); if (msg.includes('密码已泄露') || msg.includes('This password has been compromised')) { await dialog.dismiss(); } }); // 后续操作... }
内容的提问来源于stack exchange,提问作者Crazy Redd
相关产品推荐
相关产品推荐

