решение подсказал чатгпт на puppetter
const puppeteer = require('puppeteer');
const fs = require('fs');
const path = require('path');
const readline = require('readline');
async function downloadImage(page, productPageUrl) {
try {
console.log('Обработка:', productPageUrl);
await page.goto(productPageUrl, { waitUntil: 'networkidle2' });
await page.waitForSelector('#big-photo-0 a', { timeout: 10000 });
const imageUrl = await page.evaluate(() => {
const link = document.querySelector('#big-photo-0 a');
return link ? link.href : null;
});
if (!imageUrl) {
console.error('Не нашли ссылку на изображение на странице:', productPageUrl);
return;
}
console.log('Найдена картинка:', imageUrl);
const response = await page.goto(imageUrl);
if (!response || !response.ok()) {
console.error('Не удалось загрузить изображение:', imageUrl);
return;
}
const buffer = await response.buffer();
const filename = path.basename(new URL(imageUrl).pathname);
fs.writeFileSync(filename, buffer);
console.log(`Скачано: ${filename}`);
} catch (err) {
console.error('Ошибка при обработке', productPageUrl, err.message);
}
}
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36');
const rl = readline.createInterface({
input: fs.createReadStream('urls.txt'),
crlfDelay: Infinity
});
for await (const url of rl) {
if (url.trim()) {
await downloadImage(page, url.trim());
// Небольшая задержка, чтобы не перегружать сервер (можно подстроить)
await new Promise(r => setTimeout(r, 1000));
}
}
await browser.close();
})();