在网络抓取/测试时,如何通过通知弹出窗口?

目标:我正在尝试使用Puppeteer从instagram抓取图片,以编程方式登录到我的帐户并开始挖掘数据。

问题:我可以正常登录,但随后弹出一个询问我是否需要通知的弹出窗口(我无脑地转身查看此操作)。我正在以下示例代码中找到它:https://github.com/checkly/puppeteer-examples/blob/master/3.%20login/instagram.js,它使用下面的try块查找通知弹出窗口,然后单击“现在不行”按钮。

//check if the app asks for notifications
    try {
            await loginPage.waitForSelector(".aOOlW.HoLwm",{
                timeout:5000
            });
            await loginPage.click(".aOOlW.HoLwm");
        } catch (err) {

        }

问题在于它实际上并未单击“不立即”按钮,因此我的脚本陷入了困境。选择器指向正确的div,那有什么用呢?

blzhi 回答:在网络抓取/测试时,如何通过通知弹出窗口?

能否请您尝试使用browserContext.overridePermissions?启用“通知”  您可以覆盖通知。例如,这是在登录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();
本文链接:https://www.f2er.com/3135802.html

大家都在问