Задать вопрос
@delphin21222

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

Есть список урлов фоток которые спрятаны под заглушкой, помогите понять как их выкачать
Пример ссылки everprof.ru/upload/iblock/9ca/cq24bjjv1biufasfuc0i...
Видно что кмс битрикс, но при попытке скачать с помощью либо парсера либо сторонних программ скачивается заглушка 13 кб, но по факту там полноценное фото в 1.5 мб, которое можно скачать открыв в хроме, через правую клавишу мышки Сохранить как.
Таких ссылок на фотки у меня около 4т
  • Вопрос задан
  • 129 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
VoidVolker
@VoidVolker
Dark side eye. А у нас печеньки! А у вас?
Браузерным движком и качать - там по факту сначала отдаётся хтмл со скриптом, а так же установкой кукой со стороны сервера и только потом скрипт делает редирект, а сервер отдаёт картинку при наличии правильной куки. Тот же Селениум или NWJS. Кроме того, картинка по вашей ссылке не 1.5 Мб, а всего лишь чуть меньше 200 Кб.
Ответ написан
Комментировать
@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();
})();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы