Puppeteer.js — передача массива из .addScriptTag в .then

#javascript #node.js #web-scraping #puppeteer #webautomation

#javascript #node.js #очистка веб-страниц #кукловод #вебавтоматизация

Вопрос:

Я создаю scraper с помощью puppeteer, и я создал js-скрипт, который хранит некоторые данные в массиве (и когда я использую его в консоли в браузере, он работает)… Но когда я пытаюсь сохранить его в файле JSON с помощью fs.writeFileSync, я получаю ошибку… Этот способ работает в том же скребке, который я создал с помощью nightmare.js . Я предполагаю, что я передаю массив неправильным способом (для puppeteer), и я не уверен, что делать. Проблемный код:

 await page.addScriptTag({path: 'script.js'}).then((array) => {  fs.writeFileSync('data' i '.json', JSON.stringify(array));
  console.log(array); })
  

Спасибо!

Ответ №1:

addScriptTag возвращает не результат скрипта, а ElementHandle представляющий сгенерированный SCRIPT тег.

Что вы могли бы сделать, это добавить этот тег скрипта, предоставить функцию, а затем вызвать эту функцию с помощью функции evaluate:

 await page.addScriptTag({path: 'script.js'});
const array = await page.evaluate(() => someFunction());
await fs.writeFileSync('data' i '.json', JSON.stringify(array);
  

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

1. Большое вам спасибо! Я действительно не мог понять, потому что это отличается от nightmare.. Вы спасаете жизнь!