Передать cookie от Актера к Crawler - PullRequest
0 голосов
/ 09 мая 2019

Я установил сканер с URL-адресами, которые я хочу сканировать, актер работает, я протестировал пример cookie / скриншот.У меня просто проблема с передачей cookie от актера для сканирования:

const Apify = require('apify');

Apify.main(async () => {
    const input = await Apify.getValue('INPUT');

    const browser = await Apify.launchPuppeteer();
    const page = await browser.newPage();
    await page.goto('http://xy.com/login');

    // Login
    await page.type('#form_user_login_email', input.username);
    await page.type('#form_user_login_password', input.password);
    await page.evaluate(() => { document.querySelectorAll('.btn-full-width')[1].click(); });
    await page.waitForNavigation();

    // Get cookies
    const cookies = await page.cookies();

    // Use cookies in other tab or browser
    //const page2 = await browser.newPage();
    //await page2.setCookie(...cookies);
    // Get cookies after login

    const apifyClient = Apify.client;
    // call crawler with cookies
    const execution = await apifyClient.crawlers.startExecution({
    crawlerId: 'mhi',
    settings: {
      cookies: cookies
    }
    });

    console.log('Done.');

    console.log('Closing Puppeteer...');
    await browser.close();

});

Я думаю, что cookie не передается, потому что Crawler не вошел в систему.

1 Ответ

1 голос
/ 10 мая 2019

Ваш код должен работать.Может быть, вы можете попробовать установить cookiesPersistence : 'OVER_CRAWLER_RUNS' в настройках.Если вы не уверены, были ли переданы файлы cookie, вы можете использовать конечную точку API https://api.apify.com/v1/user_id/crawlers/crawler_id?token=api_apify_token&executionId=execution_id для проверки.

Но вам не нужно передавать файлы cookie сканеру, вы можете сканировать его непосредственно в актере с помощью Apify SDK,Вам нужно просто переопределить функцию goto в PuppeteerCrawler, где вы устанавливаете куки.Проверьте это для документ для puppeterCrawler .

const Apify = require('apify');

Apify.main(async () => {
    const input = await Apify.getValue('INPUT');

    const browser = await Apify.launchPuppeteer();
    const page = await browser.newPage();
    await page.goto('http://xy.com/login');

    // Login
    await page.type('#form_user_login_email', input.username);
    await page.type('#form_user_login_password', input.password);
    await page.evaluate(() => { document.querySelectorAll('.btn-full-width')[1].click(); });
    await page.waitForNavigation();

    // Get cookies
    const cookies = await page.cookies();

    const crawler = new Apify.PuppeteerCrawler({
        // puppeteer crawler options
        gotoFunction: async ({ request, page }) => {
            await page.setCookie(cookies);
            return page.goto(request.url);
        }
    });

    await crawler.run();

    console.log('Done.');

    console.log('Closing Puppeteer...');
    await browser.close();
});
...