Je voulais savoir si quelqu'un qui utilise Puppeteer-Cluster pouvait m'expliquer comment la fonction Cluster.Launch({settings}) protège contre le partage des cookies et des données web entre des pages dans un contexte différent.
Faites les contextes de navigation ici En fait, les cookies sont bloqués et les données des utilisateurs ne sont pas partagées ou suivies ? La page désormais tristement célèbre de Browserless semble penser que non, ici et que .launch({}) doit être appelé sur la tâche, et non avant la file d'attente.
Ma question est donc la suivante : comment savoir si puppeteer-cluster partage les cookies / données entre les tâches en file d'attente ? Et quelles sont les options disponibles dans la bibliothèque pour réduire les risques d'être étiqueté comme un bot ?
C'est réglé : J'utilise page.authenticate avec un service proxy, un agent utilisateur aléatoire, et je suis toujours bloqué (403) de temps en temps par le site sur lequel j'effectue le test.
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();
}