Кукольник Node генерирует куки после того, как последняя страница приземлилась (после завершения всех перенаправлений) - PullRequest
0 голосов
/ 17 мая 2019

Мой сценарий кукловода приземляется на одной странице, но может быть некоторое внутреннее перенаправление, и я хочу сгенерировать cookie-файл после того, как последняя страница попадет. Итак, я установил некоторый тайм-аут ожидания, чтобы я мог убедиться, что моя страница была загружена.

Я также создаю скриншот и вижу свою страницу Вот код Иногда он генерирует ложное печенье.

async function main(proxy) {

    let promiseArray = [];

    let chromeOptions = {
        headless: true,
        slowMo:10,
        defaultViewport: null,
        args: [
            `--proxy-server=${proxy}`,
        ]
    };

    const browser = await puppeteer.launch(chromeOptions);

    const page = await browser.newPage();

    let finalCookie = '';

    const userAgent = 'Mozilla/5.0 (X11; Linux x86_64)' +
        'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.39 Safari/537.36';

    // **This is page load event**
    promiseArray.push(new Promise(async function(resolve, reject) {
        await page.on('load', async function () {
            let cookies = await page.cookies();
            console.log("START==================================");

            console.log(await page.url());

            let cookieArray = [];

            cookies.forEach(function (item) {
                cookieArray.push(item.name + '='+item.value);
            });

            finalCookie = cookieArray.join(';');

            console.log('END');

            resolve();
        });
    }));


    await page.setUserAgent(userAgent);

    // const page = await browser.createIncognitoBrowserContext();
    await page.authenticate({ username: 'spopov', password: '68LYCfVy' });

    url = urls[Math.floor(Math.random() * urls.length)];

    await page.goto(url, {
        waitUntil: 'networkidle0',
        timeout: 0
    });

    let filename = 'screenshots/'+ proxy + '-1.png';

    try {
        await page.waitForSelector('#someid');
    } catch (e) {
        console.log("Error in cookie generation");
        await page.screenshot({path: filename});
    }

    await page.screenshot({path: filename});

    await timeout(3000);
    filename = 'screenshots/'+ proxy + '-2.png';

    await page.screenshot({path: filename});

    await browser.close();

    return Promise.all(promiseArray)
        .then(async (result) => {
            let cookies = await page.cookies();
            let cookieArray = [];

            cookies.forEach(function (item) {
                cookieArray.push(item.name + '='+item.value);
            });

            finalCookie = cookieArray.join(';');

            return finalCookie;
        });
};

Я хочу убедиться, что когда мой файл cookie сгенерирован, страница полностью загружена, и я получаю правильный файл cookie.

const timeout = millis => новое обещание (resol => setTimeout (resol, millis));

1 Ответ

0 голосов
/ 17 мая 2019

Вы можете использовать page.waitForNavigation():

// Navigate to desired page...

await page.waitForNavigation();

// Generate cookie...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...