Utiliser des proxies avec Playwright et Puppeteer : Python et Node (2026)

Publié le 2 juin 2026 · ≈9 min de lecture

Les navigateurs headless rendent le JavaScript, ils gèrent donc les sites modernes que les simples clients HTTP ne peuvent pas traiter. Mais un navigateur envoie toujours chaque requête depuis une seule IP, et l'automatisation est repérée dès qu'un site limite le débit ou prend l'empreinte de cette adresse. Utiliser des proxies avec Playwright et Puppeteer répartit le trafic sur plusieurs IP et, bien fait, fait passer votre automatisation pour des utilisateurs ordinaires. Voici la configuration qui fonctionne pour les deux, en Python et Node.

Playwright avec un Proxy (Python)

Définissez le proxy au lancement du navigateur. Passez l'authentification dans des champs username et password séparés — n'intégrez pas les identifiants dans l'URL du serveur :

from playwright.sync_api import sync_playwright

PROXY = {
    "server": "http://gate.jibaoproxy.com:10001",
    "username": "USERNAME",
    "password": "PASSWORD",
}

with sync_playwright() as p:
    browser = p.chromium.launch(proxy=PROXY, headless=True)
    page = browser.new_page()
    page.goto("https://httpbin.org/ip")
    print(page.inner_text("body"))
    browser.close()

JIBAO expose à la fois HTTP et SOCKS5 sur la passerelle. Utilisez l'endpoint HTTP pour l'automatisation du navigateur : Playwright et Puppeteer ne prennent pas en charge les proxies SOCKS5 authentifiés, donc HTTP-avec-auth est le choix fiable.

Playwright avec un Proxy (Node)

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

(async () => {
  const browser = await chromium.launch({
    headless: true,
    proxy: {
      server: 'http://gate.jibaoproxy.com:10001',
      username: 'USERNAME',
      password: 'PASSWORD',
    },
  });
  const page = await browser.newPage();
  await page.goto('https://httpbin.org/ip');
  console.log(await page.innerText('body'));
  await browser.close();
})();

Faites tourner les IP par Contexte de Navigateur

La façon la plus propre de faire tourner les IP dans Playwright est une IP par BrowserContext. Chaque contexte est une session isolée (avec ses propres cookies et son cache), donc lier chacun à une IP de sortie différente vous donne des identités parallèles depuis un seul processus de navigateur :

from playwright.sync_api import sync_playwright

def ctx_proxy(session_id):
    return {
        "server": "http://gate.jibaoproxy.com:10001",
        "username": f"USERNAME-session-{session_id}",
        "password": "PASSWORD",
    }

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    for i in range(3):
        context = browser.new_context(proxy=ctx_proxy(f"ctx{i}"))
        page = context.new_page()
        page.goto("https://httpbin.org/ip")
        print(i, page.inner_text("body"))
        context.close()
    browser.close()

Chaque contexte utilise un jeton de session sticky distinct, donc l'IP reste stable à l'intérieur d'un contexte (idéal pour les flux de connexion) mais diffère entre contextes (idéal pour exécuter plusieurs comptes en parallèle). C'est le schéma qu'automatisent les navigateurs antidétection comme GoLogin et Dolphin Anty — consultez notre guide de configuration de proxy antidétection.

Puppeteer avec un Proxy (Node)

Puppeteer définit le serveur proxy comme un drapeau de lancement de Chromium, puis s'authentifie sur l'objet page :

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({
    headless: 'new',
    args: ['--proxy-server=http://gate.jibaoproxy.com:10001'],
  });
  const page = await browser.newPage();
  await page.authenticate({ username: 'USERNAME', password: 'PASSWORD' });

  await page.goto('https://httpbin.org/ip');
  console.log(await page.evaluate(() => document.body.innerText));
  await browser.close();
})();

Comme le proxy est un drapeau au niveau du processus, un seul navigateur Puppeteer utilise une seule IP. Pour faire tourner les IP, lancez un nouveau navigateur par identité (plus lourd) ou pilotez la rotation via une passerelle qui change d'IP à chaque connexion.

Sessions Sticky pour les Flux de Connexion

Tout flux qui crée un cookie de session doit conserver la même IP pendant toute sa durée de vie. Un cookie émis sur l'IP-A qui apparaît soudain depuis l'IP-B est interprété comme un détournement de session et déclenche une réauthentification ou un bannissement. Gardez un contexte (ou un navigateur) par compte connecté, épinglé à un seul jeton de session sticky, pendant toute la session.

N'Oubliez Pas l'Empreinte

Une IP résidentielle est nécessaire mais pas suffisante. Les sites lisent aussi le handshake TLS/JA4 de votre navigateur, l'ordre des frames HTTP/2, le canvas, le WebGL et les propriétés de navigator. Le Chromium headless de base laisse fuiter navigator.webdriver = true et une empreinte headless qui défait la meilleure des IP. Atténuez cela avec des plugins stealth et des drapeaux de lancement réalistes :

// Node: puppeteer-extra + stealth
const puppeteer = require('puppeteer-extra');
const Stealth = require('puppeteer-extra-plugin-stealth');
puppeteer.use(Stealth());

// Realistic launch flags
const browser = await puppeteer.launch({
  headless: 'new',
  args: [
    '--proxy-server=http://gate.jibaoproxy.com:10001',
    '--disable-blink-features=AutomationControlled',
    '--window-size=1920,1080',
  ],
});

Pour voir exactement quels signaux vous laissez fuiter, exécutez votre navigateur automatisé contre le vérificateur gratuit d'empreintes JA3/JA4 de JIBAO. Pour la mécanique plus approfondie des raisons pour lesquelles les handshakes sont signalés, lisez comment contourner le fingerprinting TLS et la recette complète de contournement de Cloudflare.

Vérifiez et Déboguez

Boostez Votre Automatisation de Navigateur

Obtenez 500 Mo de trafic gratuit et des IP résidentielles qui gardent Playwright et Puppeteer hors de la liste des bannis.

Démarrer l'essai gratuit

Pour tous les produits IP · un immense pool de nœuds disponibles à tout moment

Inscrivez-vous maintenant et obtenez jusqu'à 100 % de remboursement sur votre recharge

Les nouveaux utilisateurs reçoivent 500 Mo à l'inscription, plus un bonus sur la première recharge. Offre à durée limitée.