Skip to content
Intermediate / 5 min read

ProxyScrape + Puppeteer : comment router les scrapers Node.js via des proxys HTTP et SOCKS5

Un guide étape par étape pour configurer les proxys résidentiels et datacenter de ProxyScrape dans Puppeteer, y compris l'authentification pour les proxys HTTP et un relais local pour SOCKS5.

Windows macOS Linux Scraping Web

Aperçu

Puppeteer est une bibliothèque Node.js qui contrôle Chrome ou Chromium sans interface graphique. Lors du scraping à grande échelle, l'acheminement des requêtes via des proxys est essentiel pour éviter les bans IP et accéder à du contenu géo-restreint. Ce tutoriel montre comment configurer les proxys résidentiels et datacenter de ProxyScrape dans Puppeteer pour les protocoles HTTP et SOCKS5. Comme Chromium ne prend pas en charge directement les proxys SOCKS5 authentifiés, vous apprendrez également à mettre en place un relais local avec gost pour faire le lien entre l'authentification HTTP et SOCKS5.

Prérequis

  • Node.js 18 ou version ultérieure installé sur Windows, macOS ou Linux.
  • Un compte ProxyScrape avec des proxys résidentiels ou datacenter. Notez l'hôte, le port, le nom d'utilisateur et le mot de passe de votre proxy depuis le tableau de bord ProxyScrape.
  • Connaissance de base de JavaScript et de la ligne de commande.

Étape 1 : Configurer un nouveau projet Node.js

  1. Créez un nouveau répertoire et initialisez un projet :
    mkdir puppeteer-proxyscrape && cd puppeteer-proxyscrape
    npm init -y
    
  2. Installez Puppeteer :
    npm install puppeteer
    
    Cela télécharge une version compatible de Chromium.

Étape 2 : Configurer un proxy HTTP avec authentification

Les proxys HTTP de ProxyScrape prennent en charge l'authentification par nom d'utilisateur/mot de passe. Puppeteer peut transmettre les identifiants du proxy à l'aide de la méthode page.authenticate().

Créez un fichier nommé http-proxy.js :

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({
    headless: true,
    args: [
      '--proxy-server=http://proxy.proxyscrape.com:12345' // Remplacez par l'hôte et le port de votre ProxyScrape
    ]
  });

  const page = await browser.newPage();

  // Remplacez par votre nom d'utilisateur et mot de passe ProxyScrape
  await page.authenticate({
    username: 'your-username',
    password: 'your-password'
  });

  await page.goto('https://httpbin.org/ip', { waitUntil: 'networkidle2' });
  const content = await page.content();
  console.log(content);

  await browser.close();
})();

Exécutez le script :

node http-proxy.js

La sortie doit afficher l'IP du proxy, ce qui confirme la configuration.

Étape 3 : Alterner les proxys HTTP à chaque requête

Pour les gros scrapes, alternez le proxy pour chaque page ou requête. Maintenez un tableau de proxys et sélectionnez-en un au hasard ou de manière séquentielle.

const proxies = [
  { host: 'proxy1.proxyscrape.com', port: 12345, username: 'user', password: 'pass' },
  { host: 'proxy2.proxyscrape.com', port: 12345, username: 'user', password: 'pass' }
];

function getRandomProxy() {
  return proxies[Math.floor(Math.random() * proxies.length)];
}

(async () => {
  const proxy = getRandomProxy();
  const browser = await puppeteer.launch({
    args: [`--proxy-server=http://${proxy.host}:${proxy.port}`]
  });
  const page = await browser.newPage();
  await page.authenticate({ username: proxy.username, password: proxy.password });
  await page.goto('https://httpbin.org/ip');
  // ...
  await browser.close();
})();

Si votre offre ProxyScrape fournit un point de terminaison rotatif (un seul hôte:port qui fait tourner l'IP à chaque requête), utilisez-le au lieu de gérer une liste.

Étape 4 : Utiliser des proxys SOCKS5 via un relais local

Chromium prend en charge les proxys SOCKS5 mais ne prend pas en charge l'authentification par nom d'utilisateur/mot de passe pour ceux-ci. Pour utiliser les proxys SOCKS5 de ProxyScrape avec authentification, exécutez un relais local qui accepte le HTTP sans authentification et transfère vers le proxy SOCKS5 authentifié.

  1. Installez gost (un simple relais proxy). Sur macOS avec Homebrew :

    brew install gost
    

    Sous Linux, téléchargez le binaire depuis la page des versions de gost. Sous Windows, téléchargez le fichier .exe depuis la même page.

  2. Démarrez gost avec un écouteur HTTP et un redirecteur SOCKS5 :

    gost -L http://:8080 -F socks5://your-username:[email protected]:1080
    

    Remplacez le nom d'utilisateur, le mot de passe, l'hôte et le port par vos informations SOCKS5 ProxyScrape.

  3. Pointez Puppeteer vers le relais HTTP local :

    const browser = await puppeteer.launch({
      args: ['--proxy-server=http://127.0.0.1:8080']
    });
    

    Aucun page.authenticate() n'est nécessaire car le relais local gère l'authentification.

  4. Testez avec la même vérification httpbin.org/ip.

Étape 5 : Vérifier que le proxy fonctionne

Utilisez un service d'écho IP fiable pour confirmer que le proxy est actif et ne divulgue pas votre véritable IP :

await page.goto('https://api.ipify.org?format=json');
const body = await page.evaluate(() => document.body.innerText);
console.log(JSON.parse(body).ip);

Comparez l'IP renvoyée avec votre IP réelle.

Dépannage

  • 407 Proxy Authentication Required : Assurez-vous que page.authenticate() est appelé avant page.goto(). Pour SOCKS5, confirmez que les identifiants du relais sont corrects.
  • ERR_PROXY_CONNECTION_FAILED : Vérifiez l'hôte et le port du proxy. Pour SOCKS5, assurez-vous que le relais gost est en cours d'exécution et accessible.
  • Erreurs SSL : Certains proxys peuvent ne pas prendre en charge le tunneling HTTPS. Utilisez des proxys HTTP pour les cibles HTTPS, ou vérifiez que votre proxy SOCKS5 prend en charge CONNECT.
  • Réponses lentes : Les proxys résidentiels peuvent être plus lents. Augmentez les délais d'attente avec page.setDefaultNavigationTimeout(60000).
  • IP qui ne change pas : Si vous utilisez une liste de proxys statiques, confirmez la logique de rotation. Si vous utilisez un point de terminaison rotatif, vérifiez que la rotation ProxyScrape est activée dans votre tableau de bord.

Résumé

Vous avez configuré avec succès les proxys HTTP et SOCKS5 de ProxyScrape avec Puppeteer. Pour les proxys HTTP, utilisez --proxy-server et page.authenticate(). Pour SOCKS5, exécutez un relais local avec gost pour gérer l'authentification. Alternez les proxys à chaque requête pour répartir le trafic et éviter les blocages. Vérifiez toujours votre IP de sortie avant de lancer un gros scrape.