Когда я проверяю / проверяю, как пройти через всплывающие уведомления? - PullRequest
0 голосов
/ 08 ноября 2019

Цель: я пытаюсь очистить фотографии из Instagram с помощью Puppeteer, чтобы программно войти в свою учетную запись и начать анализ данных.

Проблема: я могу войти в систему нормально, но затем я получаю всплывающее окно с вопросом, хочу ли я получать уведомления (я отключился, чтобы увидеть это в действии). Я следую примеру кода для этого, найденного здесь: 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, так что дает?

1 Ответ

1 голос
/ 08 ноября 2019

Вы можете попробовать включить "уведомления", используя 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();
...