2

有没有办法使用 puppeteer 回复 Chrome 的通知?我试过禁用通知(我想它会默认选择是?),但它没有帮助:

const browser = await puppeteer.launch({headless: false, slowMo: 250, args: ["--disable-notifications"]});
4

5 回答 5

7

是的,您可以像@splintor 所说的那样覆盖通知。例如,这是在登录 facebook 时禁用“允许通知”弹出窗口的代码。

let crawl = async function(){

    let browser = await puppeteer.launch({ headless:false });
    const context = browser.defaultBrowserContext();
                              //        URL                  An array of permissions
    context.overridePermissions("https://www.facebook.com", ["geolocation", "notifications"]);
    let page = await browser.newPage();
    await page.goto("https://www.facebook.com");

    await page.type("#email", process.argv[2]);
    await page.type("#pass", process.argv[3]);
    await page.click("#u_0_2");
    await page.waitFor(1000);
    await page.waitForSelector("#pagelet_composer");
    let content2 = await page.$$("#pagelet_composer");
    console.log(content2); // .$$ An array containing elementHandles .$ would return 1 elementHandle

}

crawl();
于 2019-09-30T13:09:14.207 回答
3

检查ovverridePermissions,它是在 Puppeteer v1.8.0 中添加的。

于 2018-11-18T08:41:15.300 回答
3

你只需要传递参数

例子:

args: [
        "--disable-notifications"
      ]
于 2020-04-26T21:22:23.117 回答
0

确保您想要覆盖其通知的网站不会重定向到子域,因为如果不使用重定向的 url 调用它,overridePermissions 将无法立即工作。

于 2022-01-06T18:10:29.300 回答
0

示例:用于关闭通知弹出窗口(puppeteer)

  const puppeteer = require("puppeteer");

  const website = "https://facebook.com/";

  puppeteer
    .launch({ headless: false })
    .then(async (browser) => {
      const page = await browser.newPage();
      await page.goto(website);
     
      const context = browser.defaultBrowserContext();
      context.overridePermissions(website, ["notifications"]);
    })
    .catch(console.log);
于 2021-06-18T10:05:38.557 回答