Чтобы загрузить изображения с веб-сайта с помощью 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 '
с желаемым каталогом назначения.