Я хотел бы знать, может ли кто-либо, использующий Puppeteer-Cluster, рассказать, как Cluster.Launch ({settings}) защищает от совместного использования файлов cookie и веб-данных между страницами в другом контексте.
Имеет ли браузер контексты здесь , фактически блокирует файлы cookie, а пользовательские данные не передаются и не отслеживаются? Похоже, что теперь небезызвестная печально известная страница думает, что нет, здесь и что .launch ({}) должен вызываться для задачи, а не впереди очереди.
Так что мой вопрос: как мы знаем, разделяет ли кукловод-кластер файлы cookie / данные между задачами в очереди? И какие варианты есть в библиотеке, чтобы снизить шансы на то, чтобы их назвали ботом?
Установка: я использую page.authenticate с прокси-сервисом, случайным пользовательским агентом и по-прежнему время от времени блокируюсь (403) по сайту, на котором я выполняю тест.
async function run() {
// Create a cluster with 2 workers
const cluster = await Cluster.launch({
concurrency: Cluster.CONCURRENCY_BROWSER, //Cluster.CONCURRENCY_PAGE,
maxConcurrency: 2, //5, //25, //the number of chromes open
monitor: false, //true,
puppeteerOptions: {
executablePath,
args: [
"--proxy-server=pro.proxy.net:2222",
"--incognito",
"--disable-gpu",
"--disable-dev-shm-usage",
"--disable-setuid-sandbox",
"--no-first-run",
"--no-sandbox",
"--no-zygote"
],
headless: false,
sameDomainDelay: 1000,
retryDelay: 3000,
workerCreationDelay: 3000
}
});
// Define a task
await cluster.task(async ({ page, data: url }) => {
extract(url, page); //call the extract
});
//task
const extract = async ({ page, data: dataJson }) => {
page.setExtraHTTPHeaders({headers})
await page.authenticate({
username: proxy_user,
password: proxy_pass
});
//Randomized Delay
await delay(2000 + (Math.floor(Math.random() * 998) + 1));
const response = await page.goto(dataJson.Url);
}
//loop over inputs, and queue them into cluster
var dataJson = {
url: url
};
cluster.queue(dataJson, extract);
}
// Shutdown after everything is done
await cluster.idle();
await cluster.close();
}