You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在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

火山引擎 最新活动