Как очистить веб-сайт с помощью Puppeteer в Node.js?

Опубликовано: 27 Июля, 2021

Puppeteer - это библиотека Node.js, которая предоставляет высокоуровневый API для управления Chrome или Chromium без головы по протоколу DevTools. Это позволяет автоматизировать, тестировать и очищать веб-страницы через браузер без заголовка / заголовка.

Установка Puppeteer: чтобы использовать puppeteer, у вас должен быть установлен Node.js. Затем Puppeteer можно установить в командной строке с помощью диспетчера пакетов npm.

 npm установить кукловод

Использование Puppeteer: библиотеку Puppeteer можно импортировать в ваш скрипт, используя:

 const puppeteer = require ('кукловод');

Важно помнить, что Puppeteer - это библиотека на основе обещаний, которая выполняет асинхронные вызовы экземпляра Chrome без заголовка. Поэтому мы завернем его в асинхронную оболочку. Это означает, что код выполняется немедленно.

Вот простой пример создания снимка экрана страницы:

Javascript




import Puppeteer
const puppeteer = require( 'puppeteer' );
(async () => {
const browser = await puppeteer.launch();
// Open new page in headless browser
const page = await browser.newPage();
// To visit page in browser
await page.goto( ' https://scrapethissite.com ' );
// Save Screenshot at Path
await page.screenshot({path: 'screenshot.png' });
// Close our browser instance
await browser.close();
})();


Запуск вашего кода: сохраните ваш код как файл JavaScript и запустите его в командной строке, используя следующую команду:

узел filename.js

Пример: следующий код возвращает объект с названием хоккейной команды НХЛ и победами за этот год,

Javascript




const puppeteer = require( 'puppeteer' );
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto( ' https://scrapethissite.com/pages/forms/ ' );
const textsArray = await page.evaluate(
() => [...document.querySelectorAll(
'#hockey > div > table > tbody > tr > td.name' )]
.map(elem => elem.innerText)
);
const WinArray = await page.evaluate(
() => [...document.querySelectorAll(
'#hockey > div > table > tbody > tr > td.wins' )]
.map(elem => elem.innerText)
);
var result = {};
textsArray.forEach((textsArray, i) =>
result[textsArray] = WinArray[i]);
console.log(result);
await browser.close();
})();


Выход:

{ ‘Boston Bruins’: ’36’, ‘Buffalo Sabres’: ’31’, ‘Calgary Flames’: ’31’, ‘Chicago Blackhawks’: ’36’, 
‘Detroit Red Wings’: ’34’, ‘Edmonton Oilers’: ’37’, ‘Hartford Whalers’: ’31’, ‘Los Angeles Kings’: ’46’, 
‘Minnesota North Stars’: ’27’, ‘Montreal Canadiens’: ’39’, ‘New Jersey Devils’: ’32’, ‘New York Islanders’: ’25’, 
‘New York Rangers’: ’36’, ‘Philadelphia Flyers’: ’33’, ‘Pittsburgh Penguins’: ’41’, ‘Quebec Nordiques’: ’16’, 
‘St. Louis Blues’: ’47’, ‘Toronto Maple Leafs’: ’23’, ‘Vancouver Canucks’: ’28’, ‘Washington Capitals’: ’37’, 
‘Winnipeg Jets’: ’26’}