gobrando
gobrando

Reputation: 19

When web scraping/testing how do I get passed the notifications popup?

Goal: I'm trying to scrape pictures from instagram using Puppeteer to programmatically log in to my account and start mining data.

The issue: I can log in fine but then I get hit with a popup asking if I want notifications (I turned headless off to see this in action). I'm following the example code for this found here: https://github.com/checkly/puppeteer-examples/blob/master/3.%20login/instagram.js which uses the below try block to find the notification popup and click the 'Not now' button.

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

        }

The problem is it doesn't actually click the 'Not now' button so my script is stuck in limbo. The selector is pointing to the right div so what gives?

Upvotes: 0

Views: 1404

Answers (1)

Mohammed naji
Mohammed naji

Reputation: 1102

can you please try enabling "notifications" using browserContext.overridePermissions? you can override notification. This is the code that would, for example, disable the Allow Notifications popup when logging into 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();

Upvotes: 1

Related Questions