如何在Puppeteer中禁用"此类文件可能危害您的电脑"下载提示
嘿,这个问题我太熟了!用Puppeteer做自动化下载时,Chrome弹出的“此类文件可能危害您的电脑”提示真的能把流程卡得死死的——总不能手动去点“保留”吧?别慌,我给你分享两个亲测有效的解决办法:
解决办法
方法1:全局禁用下载安全提示(最直接)
直接在启动浏览器时配置参数,从根源上关掉这个提示和下载确认框,适合需要批量下载的场景:
const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch({ args: [ '--safebrowsing-disable-download-protection', // 核心:关掉下载保护提示 '--safebrowsing-disable-auto-update' // 可选:关闭安全列表自动更新,避免后续触发提示 ], userPreferences: { download: { prompt_for_download: false, // 不让浏览器弹下载确认框 default_directory: '/你要保存文件的路径' // 指定默认下载目录,避免找不到文件 }, safebrowsing: { enabled: false // 彻底关闭安全浏览功能,进一步杜绝这类提示(按需开启) } } }); const page = await browser.newPage(); // 这里放你的自动化操作,比如打开目标页面、点击下载按钮 await page.goto('https://你的目标网站.com'); await page.click('#下载按钮的选择器'); // 简单等待下载完成(也可以用更精准的监听方法,比如下面的方法2) await page.waitForTimeout(5000); await browser.close(); })();
重点说下几个关键设置:
--safebrowsing-disable-download-protection:这是解决你问题的核心,直接禁用Chrome对下载文件的安全拦截提示prompt_for_download: false:让浏览器自动把文件下载到指定目录,不用再弹确认框- 如果你不想彻底关安全浏览,可以只保留前两个参数,不用设置
safebrowsing.enabled: false
方法2:针对单个下载操作放行(更灵活)
如果不想全局改动安全设置,也可以监听下载事件,手动允许每个下载请求,绕过提示:
const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch({ userPreferences: { download: { default_directory: '/你要保存文件的路径' } } }); const page = await browser.newPage(); // 监听页面的下载事件 page.on('download', async (downloadItem) => { // 直接允许这次下载,绕过安全提示 await downloadItem.accept(); // 等待下载完成后,获取文件路径 const savedPath = await downloadItem.path(); console.log(`文件已经保存到:${savedPath}`); }); await page.goto('https://你的目标网站.com'); await page.click('#下载按钮的选择器'); await page.waitForTimeout(5000); await browser.close(); })();
这个方法更灵活,适合只需要处理少数下载请求的场景,不会影响浏览器的其他安全设置。
小提醒
- 一定要确保你设置的下载目录有读写权限,不然下载会默默失败哦
- 如果是用无头模式(
headless: true),建议用新版的无头模式headless: 'new',老版本的无头模式可能会有下载功能的bug - 如果某个参数不生效,试试把Puppeteer更新到最新版本,不同Chrome版本对应的参数可能略有差异
内容的提问来源于stack exchange,提问作者senor




