Abonnements
PRODUIT
SOLUTIONS
par cas d'utilisation
AI Gestion du leadFacturationRéseaux SociauxGestion de projetGestion des donnéespar industrie
en savoir plus
BlogGabaritsVidéosYoutubeRESSOURCES
COMMUNAUTÉS ET RÉSEAUX SOCIAUX
PARTENAIRES
Les procurations sont essentielles pour Marionnettiste automatisation. Ils masquent votre adresse IP, contournent les restrictions géographiques et vous aident à éviter les interdictions. Voici ce que vous apprendrez sur l'utilisation des proxys dans Marionnettiste:
Type de proxy | Vitesse | l'anonymat | Prix | Idéal pour |
---|---|---|---|---|
Datacenter | Rapide | Faible | Abordable | Grattage à haut volume |
Résidentiel | Modérée | Haute | Cher | Tâches sensibles ou géo-spécifiques |
Mobile | Lent | Très élevé | Très cher | Vérification des annonces, CAPTCHA |
La configuration d'un proxy est une étape clé pour optimiser l'automatisation de votre Puppeteer. Voici comment commencer.
Vous pouvez configurer un serveur proxy lors du lancement du navigateur dans Puppeteer comme ceci :
const browser = await puppeteer.launch({
args: ['--proxy-server=http://157.230.255.230:8118']
});
const page = await browser.newPage();
Il est également important de gérer les erreurs lors de la navigation avec un proxy :
try {
await page.goto('https://books.toscrape.com/', {
timeout: 70000,
waitUntil: 'networkidle2'
});
} catch (err) {
console.log(err);
}
Ensuite, vous souhaiterez sécuriser votre connexion en configurant l’authentification proxy.
Si votre proxy nécessite une authentification, vous pouvez utiliser la méthode suivante :
await page.authenticate({
username: 'your_proxy_username',
password: 'your_proxy_password'
});
Voici une comparaison rapide des différentes méthodes d’authentification :
Méthode d'authentification | Meilleur cas d'utilisation | Complexité de la mise en œuvre |
---|---|---|
page.authenticate() |
Authentification proxy standard | Faible |
proxy-chain paquet |
Routage avancé | Moyenne |
Proxy-Authorization entête |
Sites HTTP uniquement | Haute |
Une fois que vous avez configuré votre proxy et votre authentification, il est temps de le tester.
Assurez-vous que votre proxy fonctionne en suivant ces étapes :
Voici un exemple de script pour tester votre proxy :
async function testProxy() {
const browser = await puppeteer.launch({
args: ['--proxy-server=http://157.230.255.230:8118']
});
const page = await browser.newPage();
try {
await page.goto('https://books.toscrape.com/', {
timeout: 70000,
waitUntil: 'networkidle2'
});
const content = await page.content();
console.log('Proxy connection successful');
} catch (err) {
console.log('Proxy connection failed:', err);
}
await browser.close();
}
Les tests garantissent que votre configuration proxy est prête à être utilisée dans vos tâches d'automatisation.
La gestion de la rotation des proxys est essentielle pour éviter les interdictions d'IP et éviter la limitation du débit lors du scraping ou de l'automatisation des tâches en ligne.
Pour commencer, créez une liste de proxys pouvant être utilisés en rotation efficacement. Voici un exemple de configuration et d'utilisation d'un pool de proxys :
const proxyList = [
{
host: '157.230.255.230',
port: '8118',
username: 'user1',
password: 'pass1'
},
// Add more proxy configurations
];
function getRandomProxy() {
return proxyList[Math.floor(Math.random() * proxyList.length)];
}
Lors de la configuration de votre liste de proxys, il est important de comprendre les différents types de proxys et leurs compromis :
Type de proxy | Temps de réponse | Taux de réussite | Gamme de coûts |
---|---|---|---|
Datacenter | 100-300ms | 85 à 95 % | 0.50 $ à 2 $/IP |
Résidentiel | 500-1000ms | 90 à 98 % | 2 $ à 8 $/IP |
Mobile | 800-1500ms | 95 à 99 % | 5 $ à 15 $/IP |
Chaque type a ses forces et ses faiblesses, alors choisissez en fonction de vos besoins spécifiques, tels que la vitesse, la fiabilité ou le budget.
Pour faire tourner automatiquement les proxys, vous pouvez utiliser la configuration suivante :
const ProxyChain = require('proxy-chain');
const server = new ProxyChain.Server({
port: 8080,
prepareRequestFunction: ({ request }) => {
const proxy = getRandomProxy();
return {
upstreamProxyUrl: `http://${proxy.username}:${proxy.password}@${proxy.host}:${proxy.port}`
};
}
});
const browser = await puppeteer.launch({
args: ['--proxy-server=http://localhost:8080']
});
Cette approche garantit que chaque requête est acheminée via un proxy différent sans redémarrer le navigateur, ce qui rend le processus plus efficace.
Voici quelques pratiques clés pour améliorer votre stratégie de rotation des proxys :
1. Stratégie de timing
Introduisez des délais aléatoires entre les requêtes pour simuler un comportement de navigation naturel :
function getRotationDelay() {
// Random delay between 2-5 seconds
return Math.floor(Math.random() * 3000) + 2000;
}
async function rotateProxy() {
await new Promise(resolve => setTimeout(resolve, getRotationDelay()));
const proxy = getRandomProxy();
// Apply new proxy configuration
}
2. Gestion des erreurs
Si un proxy échoue, gérez l'erreur avec élégance en passant à un nouveau proxy et en réessayant la demande :
async function handleProxyError(error, page) {
console.log(`Proxy error: ${error.message}`);
await rotateProxy();
return page.reload({ waitUntil: 'networkidle2' });
}
3. Gestion de session
Pour les tâches nécessitant une cohérence de session, utilisez le même proxy pour les requêtes associées :
const sessionMap = new Map();
function getProxyForSession(sessionId) {
if (!sessionMap.has(sessionId)) {
sessionMap.set(sessionId, getRandomProxy());
}
return sessionMap.get(sessionId);
}
Grâce à ces stratégies, vous pouvez gérer efficacement les proxys et vous préparer à des défis plus avancés tels que la gestion des blocages, des CAPTCHA et d'autres obstacles.
Choisir le bon proxy est essentiel pour l'automatisation avec Puppeteer. Voici une comparaison pour vous aider à choisir :
Fonctionnalité | Proxys résidentiels | Proxys de centre de données |
---|---|---|
Source | Fourni par les FAI aux propriétés résidentielles | Provenant de centres de données |
Vitesse | Plus lent en raison du routage du FAI | Plus rapide avec une infrastructure dédiée |
Risque de détection | Inférieur - imite le trafic réel des utilisateurs | Plus haut - plus facile à détecter |
Prix | Plus cher | Rentable |
Couverture géographique | Large, sur plusieurs sites | Souvent limité |
Meilleurs cas d'utilisation | Tâches à haut anonymat, scraping sensible, vérification des publicités | Exploration de données à haut volume, traitement par lots |
Les proxys résidentiels sont un choix solide pour les tâches qui exigent un anonymat élevé, car ils ressemblent beaucoup à l'activité réelle des utilisateurs.
Pour résoudre les blocages de sites web et les problèmes de CAPTCHA, utilisez des mécanismes de rotation et de nouvelle tentative de proxy. Voici un exemple de gestion de ces problèmes :
const proxyManager = {
rotationDelay: 2000,
async handleBlock(page) {
await page.waitForTimeout(this.rotationDelay);
const newProxy = await this.getNextProxy();
await page.authenticate(newProxy);
return page.reload({ waitUntil: 'networkidle0' });
},
async detectBlock(response) {
return response.status() === 403 || response.status() === 429;
}
};
Lorsqu'un blocage est détecté, une nouvelle tentative avec un nouveau proxy peut permettre à votre automatisation de fonctionner correctement :
page.on('response', async (response) => {
if (await proxyManager.detectBlock(response)) {
await proxyManager.handleBlock(page);
}
});
Ces stratégies aident à maintenir la continuité du flux de travail, même en cas de difficultés.
La gestion efficace des erreurs de proxy nécessite des ajustements de délai d'expiration, des contrôles de validation et des proxys de secours. Par exemple :
async function handleProxyError(error, page) {
if (error.message.includes('net::ERR_PROXY_CONNECTION_FAILED')) {
const newProxy = await getBackupProxy();
await page.authenticate(newProxy);
await page.setExtraHTTPHeaders({
'User-Agent': generateRandomUserAgent()
});
return page.reload({ waitUntil: 'networkidle2' });
}
}
Suivez ces directives pour une meilleure gestion des erreurs :
La configuration correcte de votre navigateur joue également un rôle pour garantir des performances optimales :
const browser = await puppeteer.launch({
args: ['--proxy-server=http://proxy-server:port'],
timeout: 60000,
waitUntil: 'networkidle0'
});
Enfin, validez toujours vos proxys pour vous assurer qu'ils sont fonctionnels :
async function validateProxy(proxyConfig) {
try {
const response = await fetch('https://api.ipify.org?format=json', {
proxy: `http://${proxyConfig.host}:${proxyConfig.port}`
});
return response.ok;
} catch (error) {
console.error(`Proxy validation failed: ${error.message}`);
return false;
}
}
Vous souhaitez tirer le meilleur parti de Puppeteer ? Ces conseils peuvent vous aider à optimiser la configuration de votre proxy et à améliorer les performances globales.
Réduisez les temps de chargement en bloquant les requêtes inutiles telles que les images, les polices et les feuilles de style :
await page.setRequestInterception(true);
page.on('request', (req) => {
if (req.resourceType() === 'stylesheet' || req.resourceType() === 'font' || req.resourceType() === 'image') {
req.abort();
} else {
req.continue();
}
});
Paire page.goto
avec page.waitForSelector
pour une navigation plus rapide :
await page.goto(url, {
timeout: 30000,
waitUntil: 'domcontentloaded'
});
await page.waitForSelector('.main-content');
Lors de l'optimisation de Puppeteer, n'oubliez pas qu'il existe peu de moyens d'accélérer le démarrage et l'arrêt de Puppeteer. Le gain le plus important viendra probablement d'un affichage plus rapide de vos pages cibles.
– Jon Yongfook, fondateur, Ours-bannière
Répartissez le trafic sur plusieurs proxys à l'aide de Puppeteer Cluster :
const proxyCluster = {
async distributeLoad(urls, proxyList) {
const cluster = await Cluster.launch({
concurrency: Cluster.CONCURRENCY_CONTEXT,
maxConcurrency: 5
});
await cluster.task(async ({ page, data: url }) => {
const proxy = proxyList.getNext();
await page.authenticate(proxy);
await page.goto(url);
});
}
};
Cette approche équilibre le trafic entre les proxys, complétant les méthodes de rotation précédentes pour éviter de surcharger un seul proxy.
Voici quelques défis courants et comment les gérer efficacement :
const performRequest = async (page, url) => {
try {
await page.goto(url, {
timeout: 30000,
waitUntil: 'networkidle2'
});
} catch (error) {
if (error.name === 'TimeoutError') {
await page.evaluate(() => window.stop());
return handleTimeout();
}
throw error;
}
};
const checkRateLimit = async (response) => {
if (response.status() === 429 || response.headers()['retry-after']) {
await handleRateLimit(response.headers()['retry-after']);
}
};
const handleAuthError = async (response, page, proxy) => {
if (response.status() === 407) {
await retryWithNewCredentials(page, proxy);
return true;
}
return false;
};
« En optimisant votre script Puppeteer, vous pouvez garantir un fonctionnement fluide et efficace avec des résultats précis et cohérents. »
- ScrapeOps
Gardez un œil sur les temps de réponse et les taux de réussite pour garantir que vos proxys restent efficaces et non détectés.
La configuration de Puppeteer avec des proxys implique quelques étapes importantes. Pour les proxys privés, utilisez le authenticate
fonction permettant de fournir des informations d'identification :
await page.authenticate({
username: 'proxyUser',
password: 'proxyPass'
});
Pour garantir que la page se charge complètement, utilisez le waitUntil
option (par exemple, 'networkidle2'
) et définissez un délai d'attente (par exemple, 30 secondes) :
await page.goto(url, {
waitUntil: 'networkidle2',
timeout: 30000
});
Ces configurations constituent la base d’une configuration proxy fiable.
Pour maintenir des opérations proxy sécurisées et efficaces, suivez ces stratégies :
Gestion des connexions
Optimisation de la sécurité
Voici un bref résumé des considérations importantes pour la mise en œuvre du proxy :
Aspect | Implantation | Bénéfice |
---|---|---|
Authentification | Utilisez authenticate fonction |
Sécurise l'accès aux proxys privés |
Gestion de la charge | Activer l'interception des demandes | Réduit la bande passante et accélère le chargement |
Gestion des erreurs | Mettre en œuvre le try-catch blocs |
Gère les problèmes de connexion avec élégance |
Protection d'identité | Faire tourner les proxys et les agents utilisateurs | Améliore les taux de réussite et évite les blocages |