Как распечатать документ HTML с помощью Puppeteer? - PullRequest
0 голосов
/ 10 ноября 2018

Недавно я начал сканировать сеть, используя Puppeteer. Ниже приведен код для извлечения конкретного названия продукта из торгового центра.

const puppeteer = require('puppeteer');

(async () => {

    const width = 1600, height = 1040;

    const option = { headless: false, slowMo: true, args: [`--window-size=${width},${height}`] };

    const browser = await puppeteer.launch(option);
    const page = await browser.newPage();
    const vp = {width: width, height: height};
    await page.setViewport(vp);

    const navigationPromise = page.waitForNavigation();

    await page.goto('https://shopping.naver.com/home/p/index.nhn');
    await navigationPromise;
    await page.waitFor(2000);

    const textBoxId = 'co_srh_input';
    await page.type('.' + textBoxId, '양말', {delay: 100});
    await page.keyboard.press('Enter');

    await page.waitFor(5000);
    await page.waitForSelector('div.info > a.tit');

    const stores = await page.evaluate(() => {
        const links = Array.from(document.querySelectorAll('div.info > a.tit'));
        return links.map(link => link.innerText).slice(0, 10)   // 10개 제품만 가져오기
    });

    console.log(stores);
    await browser.close();

})();

У меня есть вопрос. Как вывести результаты сканирования в HTML-документ (без использования базы данных)? Пожалуйста, используйте образец кода, чтобы объяснить это.

1 Ответ

0 голосов
/ 10 ноября 2018

fs.writeFile ()

Вы можете использовать следующую функцию write_file, которая возвращает Promise, который разрешает или отклоняет , когда fs.writeFile() успешно или неудачно.

Затем вы можете await Promise из вашей анонимной асинхронной функции и проверить, были ли данные записаны в файл:

'use strict';

const fs = require('fs');
const puppeteer = require('puppeteer');

const write_file = (file, data) => new Promise((resolve, reject) => {
  fs.writeFile(file, data, 'utf8', error => {
    if (error) {
      console.error(error);
      reject(false);
    } else {
      resolve(true);
    }
  });
});

(async () => {

  // ...

  const stores = await page.evaluate(() => {
    return Array.from(document.querySelectorAll('div.info > a.tit'), link => link.innerText).slice(0, 10); // 10개 제품만 가져오기
  });

  if (await write_file('example.html', stores.toString()) === false) {
    console.error('Error: Unable to write stores to example.html.');
  }

  // ...

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...