首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将cookie从Actor传递给Crawler

将cookie从Actor传递给Crawler
EN

Stack Overflow用户
提问于 2019-05-10 03:21:02
回答 1查看 1.2K关注 0票数 0

我用我想要抓取的URL设置了一个爬虫,演员正在工作,我用cookie/截图示例进行了测试。我只是在演员和爬虫之间传递cookie时遇到了问题:

代码语言:javascript
运行
复制
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没有登录。

EN

回答 1

Stack Overflow用户

发布于 2019-05-10 18:28:58

您的代码应该可以工作。也许你可以尝试在设置中设置cookiesPersistence : 'OVER_CRAWLER_RUNS'。如果您不确定是否传递了cookies,可以使用接口端点https://api.apify.com/v1/user_id/crawlers/crawler_id?token=api_apify_token&executionId=execution_id进行检查。

但是你不需要将cookie传递给crawler,你可以使用Apify SDK在actor中直接抓取它。您只需覆盖PuppeteerCrawler中的goto函数,您就可以在其中设置cookie。选中doc for puppeterCrawler的待办事项。

代码语言:javascript
运行
复制
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();
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56066248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档