Как заставить puppeteer работать без головы с помощью apify sdk?

#javascript #node.js #express #sdk #apify

#javascript #node.js #выражать #sdk #apify #экспресс

Вопрос:

Я пытаюсь очистить содержимое страницы с помощью apify sdk. Это также хорошо работает со следующим кодом. Но как я могу принудительно использовать Apify SDK в безголовом режиме, как с puppeteer.запуск ({безголовый: true})?

Код для справки:

 async function scrape(number) {
  let output = { links: [], title: [], content: [] };
  const URL = "https://somepage/";
  process.env.APIFY_LOCAL_STORAGE_DIR = '/someappfolder/apify_storage/run_'   number;

  const requestQueue = await Apify.openRequestQueue(number);
  await requestQueue.addRequest({ url: URL });
  const pseudoUrls = [new Apify.PseudoUrl(URL   "[.*]")];
  const crawler = new Apify.PuppeteerCrawler({
    requestQueue,
    handlePageFunction: async ({ request, page }) => {

      output.links.push(request.url);
      output.title.push(await page.title());
      output.content.push((await page.content()).length);
      var save = { url: request.url, title: await page.title(), content: (await page.content()).length };
      //sendToAirtable(save);

      console.log(`URL: ${request.url}`);
      await Apify.utils.enqueueLinks({
        page,
        selector: 'a',
        pseudoUrls,
        requestQueue,
      });
    },
    maxRequestsPerCrawl: 10,
    maxConcurrency: 10,
    minConcurrency: 2,
  });

  await crawler.run();
  return output;
};
  

Ответ №1:

Добавить launchPuppeteerOptions: { headless: true } на том же уровне, что и requestQueue
https://sdk.apify.com/docs/typedefs/launch-puppeteer-options#docsNav

РЕДАКТИРОВАТЬ: это больше не работает. Последние документы https://crawlee.dev/api/browser-crawler/interface/BrowserLaunchContext#launchOptions

Комментарии:

1. Это больше не работает.

2. Да, это было для старой версии

Ответ №2:

process.env.APIFY_HEADLESS = 1;

Это ответ, на который я наткнулся после нескольких часов поиска… https://sdk.apify.com/docs/guides/environment-variables#apify_headless

Ответ №3:

Ни один из ответов в коде здесь не сработает. Мне пришлось погуглить это, и, похоже, это работает.

 const Apify = require('apify');

Apify.main(async () => {
    const baseurl = 'https://thedomain.youwanna.check.com/somepage';

    const requestQueue = await Apify.openRequestQueue();
    await requestQueue.addRequest({ url: baseurl });

    const options = {
        requestQueue,
        launchContext: {
            launchOptions: {
                headless: true,
                slowMos: 1000,
            }
        },
        handlePageFunction: async ({ request, page }) => {
            const title = await page.title();
            console.log(`Title of ${request.url}: ${title}`);
            request
            await Apify.utils.enqueueLinks({
               requestQueue,
               page,
               pseudoUrls: [baseurl   '[.*]'],
            });
        },
    };
    const crawler = new Apify.PuppeteerCrawler(options);
    await crawler.run();
});
  

Ответ №4:

Вы можете добавить опцию без launchPuppeteerOptions головы, например, так:

 const crawler = new Apify.PuppeteerCrawler({
            requestQueue,
            launchPuppeteerOptions: {
                headless: true,
                ignoreHTTPSErrors: true,
                // slowMo: 500,
            },
            maxRequestsPerCrawl: settings.maxurls,
            maxConcurrency: settings.maxcrawlers,