puppeteer через прокси не загружает определенные страницы

Я использую puppeteer-cluster и puppeteer-page-proxy

мне нужно автоматизировать тесты на сайте https://account.proton.me/login (выполнить автоматически авторизацию).

обязательно использование прокси

const cluster = await Cluster.launch({
    puppeteer,
    concurrency: Cluster.CONCURRENCY_BROWSER, //CONCURRENCY_CONTEXT
    monitor: false,
    maxConcurrency: amt_threads,
    timeout: 2100000000,
    puppeteerOptions: {
        executablePath:executablePath(),
        headless: startHeadless,
        args: [
            '--no-sandbox',
            '--disable-web-security',
            '--ignore-certificate-errors',
            '--disable-setuid-sandbox',
            '--disable-dev-shm-usage',
            '--disable-accelerated-2d-canvas',
            '--no-first-run',
            '--no-zygote',
            '--disable-gpu',
            '--lang=ru-RU,ru'
        ],
        devtools: false,
        ignoreHTTPSErrors: true,
        workerCreationDelay: 2000
    }
});

await cluster.task(async ({ page, data: arr }) => {
    ...
    await useProxy(page, page_proxy);
});

прокси 100% рабочие:

page_proxy = 'http://user:pass@ip:port';

при переходе на https://account.proton.me/login видно что страница загружается (виден Title и белая страница), и далее ничего не происходит.

при этом к консоле браузера я вижу такие ошибки: введите сюда описание изображения

если например я попробую открыть например https://account.proton.me/assets/apple-touch-icon-60x60.png то получу

Не удается получить доступ к сайту Веб-страница по адресу https://account.proton.me/assets/apple-touch-icon-60x60.png, возможно, временно недоступна или постоянно перемещена по новому адресу. ERR_FAILED

Но если я попытаюсь открыть https://account.proton.me/assets/apple-touch-icon-60x6 то выдаст Not Found, или если открыть https://proton.me то он отлично отурывается. То есть прокси точно рабочая. но на странице авторизации не загружаются ресурсы (js, css и тд).

как решить эту проблему? буду благодарен за помощь!

без прокси все работает. но использование прокси для каждой странице индивидуально - обязательно, поэтому использую puppeteer-page-proxy , с другими сайтами проблем не обнаружил в этом модуле.


Ответы (1 шт):

Автор решения: Battrip

Как я понял, когда ты заходишь страницу через прокси, ничего не грузится, и в консоли браузера светятся какие-то ошибки.

Так вот, решение проблемы может быть в том, чтобы не настраивать прокси для каждой страницы, а сделать это на уровне браузера. Попробуй вот такой код:

const { Cluster } = require('puppeteer-cluster');
const puppeteer = require('puppeteer');
const ProxyChain = require('proxy-chain');

const proxyUrl = 'http://user:pass@ip:port';

// Преобразование HTTP-прокси в формат, понятный puppeteer
const browserProxy = await ProxyChain.anonymizeProxy(proxyUrl);

const browser = await puppeteer.launch({
  executablePath: executablePath(),
  headless: startHeadless,
  args: [
    '--no-sandbox',
    '--disable-web-security',
    '--ignore-certificate-errors',
    '--disable-setuid-sandbox',
    '--disable-dev-shm-usage',
    '--disable-accelerated-2d-canvas',
    '--no-first-run',
    '--no-zygote',
    '--disable-gpu',
    '--lang=ru-RU,ru',
    `--proxy-server=${browserProxy}`
  ],
  devtools: false,
  ignoreHTTPSErrors: true
});

const cluster = await Cluster.launch({
  puppeteer,
  concurrency: Cluster.CONCURRENCY_BROWSER,
  monitor: false,
  maxConcurrency: amt_threads,
  timeout: 2100000000,
  puppeteerOptions: {
    browser: await cluster.worker().browser(),
    workerCreationDelay: 2000
  }
});

await cluster.task(async ({ page, data: arr }) => {
  // Ваши действия с использованием прокси
  await page.goto('https://account.proton.me/login');
});

await cluster.idle();
await cluster.close();
await browser.close();
→ Ссылка