Как загрузить изображения с веб-сайта с помощью Puppeteer: несколько методов с примером кода

Чтобы загрузить изображения с веб-сайта с помощью Puppeteer, вы можете использовать следующие методы:

Метод 1: использование функции page.evaluate

const puppeteer = require('puppeteer');
const fs = require('fs');
async function downloadImages(url, selector, destination) {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto(url);
  const imageUrls = await page.evaluate((selector) => {
    const imageElements = Array.from(document.querySelectorAll(selector));
    return imageElements.map((img) => img.src);
  }, selector);
  for (let i = 0; i < imageUrls.length; i++) {
    const imageUrl = imageUrls[i];
    const imageBuffer = await page.evaluate(async (url) => {
      const response = await fetch(url);
      const blob = await response.blob();
      return new Promise((resolve, reject) => {
        const reader = new FileReader();
        reader.onloadend = () => resolve(reader.result);
        reader.onerror = reject;
        reader.readAsDataURL(blob);
      });
    }, imageUrl);
    const base64Data = imageBuffer.replace(/^data:image\/\w+;base64,/, '');
    const buffer = Buffer.from(base64Data, 'base64');
    fs.writeFileSync(`${destination}/image_${i}.png`, buffer);
  }
  await browser.close();
}
downloadImages('https://example.com', 'img', './images');

Метод 2: использование функции page.$$eval

const puppeteer = require('puppeteer');
const fs = require('fs');
async function downloadImages(url, selector, destination) {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto(url);
  const imageUrls = await page.$$eval(selector, (elements) =>
    elements.map((img) => img.src)
  );
  for (let i = 0; i < imageUrls.length; i++) {
    const imageUrl = imageUrls[i];
    await page.waitFor(1000); // Wait for a second to avoid overloading the server
    await page.goto(imageUrl);
    const imageBuffer = await page.screenshot({ fullPage: true });
    fs.writeFileSync(`${destination}/image_${i}.png`, imageBuffer);
  }
  await browser.close();
}
downloadImages('https://example.com', 'img', './images');

В обоих методах необходимо указать следующие параметры:

  • url: URL-адрес веб-сайта, содержащего изображения.
  • селектор: CSS-селектор изображений, которые вы хотите загрузить.
  • Место назначения: каталог, в котором вы хотите сохранить загруженные изображения.

Не забудьте заменить 'https://example.com'фактическим URL-адресом, 'img'соответствующим селектором и './images 'с желаемым каталогом назначения.