P PROXYDECK
Accueil / guides / Configurer des proxys dans Puppeteer et Playwright
Accueil / Apprendre / Configuration

Configurer des proxys dans Puppeteer et Playwright

12 min de lecture Intermédiaire Configuration mis à jour 30.07.2026

Un guide étape par étape pour connecter des proxys à Puppeteer et Playwright, avec des exemples de code JavaScript, la gestion des erreurs et la rotation d'IP en cours de session.

Puppeteer : intégration de base

L'option la plus simple consiste à passer le proxy via args au lancement du navigateur :

const puppeteer = require('puppeteer');

const browser = await puppeteer.launch({
  args: [
    '--proxy-server=http://gate.proxyprovider.com:7777',
    '--no-sandbox'
  ]
});

const page = await browser.newPage();
await page.goto('https://api.ipify.org');
console.log(await page.content()); // your new IP

Puppeteer : avec authentification

La plupart des fournisseurs exigent une authentification user:pass. Puppeteer ne la prend pas en charge directement via args, utilisez donc page.authenticate() :

const page = await browser.newPage();
await page.authenticate({
  username: 'your-username',
  password: 'your-password'
});

await page.goto('https://target.com');

Chez les fournisseurs residential, le format user:pass contient généralement des paramètres de session :

// Decodo: sticky 30 min, US gateway
username: 'user-spXXXX-country-us-session-abc123'
password: 'your-password'

// SOAX: sticky 1 hour, package id
username: 'package-XXX-country-us-sessionid-abc'
password: 'your-password'

Playwright : configuration

L'API de Playwright est un peu plus pratique — le proxy est passé dans le context du navigateur :

const { chromium } = require('playwright');

const browser = await chromium.launch();
const context = await browser.newContext({
  proxy: {
    server: 'http://gate.proxyprovider.com:7777',
    username: 'your-username',
    password: 'your-password'
  }
});

const page = await context.newPage();
await page.goto('https://api.ipify.org');

Rotation d'IP dans le code

Pour effectuer une rotation au sein d'un même script, créez un nouveau context pour chaque « work batch » :

async function scrapeUrls(urls) {
  for (const url of urls) {
    const context = await browser.newContext({
      proxy: { server: getNextProxy() } // your rotation function
    });
    const page = await context.newPage();
    await page.goto(url);
    // ... process
    await context.close(); // releases the IP
  }
}

Optimisation du trafic

La plus grande économie consiste à bloquer les médias et les scripts dont vous n'avez pas besoin :

await page.setRequestInterception(true);
page.on('request', req => {
  const resourceType = req.resourceType();
  if (['image', 'stylesheet', 'font', 'media'].includes(resourceType)) {
    req.abort();
  } else {
    req.continue();
  }
});

Sur des sites comme Amazon, cela économise 60–80% de la bande passante, transformant une tâche de 10 GB/jour en 2–3 GB/jour. Chez les fournisseurs facturant au GB, c'est une économie de coût de 3–4×.

Attention : bloquer entièrement le JS peut casser les pages React/SPA. Pour celles-ci, ne bloquez que image, font et media — et conservez stylesheet et script.