#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,