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 шт):
Как я понял, когда ты заходишь страницу через прокси, ничего не грузится, и в консоли браузера светятся какие-то ошибки.
Так вот, решение проблемы может быть в том, чтобы не настраивать прокси для каждой страницы, а сделать это на уровне браузера. Попробуй вот такой код:
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();