Задать вопрос
  • Как или чем скачать закодированные изображения, под заглушкой?

    @delphin21222 Автор вопроса
    решение подсказал чатгпт на 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();
    })();
    Ответ написан