Socks5Proxy

Configuration du proxy dans Playwright, connexion d'IP différentes pour chaque navigateur et contexte

Ce guide explique comment connecter les proxies HTTP et SOCKS5 de Socks5Proxy avec les options proxy de Playwright en utilisant server, username et password, ainsi que comment utiliser des IP différentes par contexte dans un même navigateur, avec des exemples en Node.js et Python.

Qu'est-ce qui est pratique dans la configuration du proxy dans Playwright?

Playwright accepte l'adresse du proxy, l'identifiant et le mot de passe dans une seule option proxy, donc il n'est pas nécessaire de gérer séparément les fenêtres d'authentification. Les trois navigateurs Chromium, Firefox et WebKit utilisent la même option.

Vous pouvez aussi exécuter un seul navigateur avec plusieurs contextes, chacun utilisant un proxy différent. Les contextes sont des profils isolés (cookies et stockage séparés), permettant de gérer plusieurs IP et sessions avec un seul navigateur pour économiser la mémoire.

L'exemple utilise l'IP 198.51.100.23, port HTTP 8000, port SOCKS5 1080, identifiant spx_user et mot de passe spx_pass.

npm install playwright
npx playwright install chromium

Comment configurer un proxy HTTP pour tout un navigateur ?

Ajoutez server, username et password à l'option proxy de launch, et toutes les pages de ce navigateur utiliseront le même proxy. Les sites HTTPS sont transmis via un tunnel CONNECT chiffré.

import { chromium } from "playwright";

const browser = await chromium.launch({
  proxy: { server: "http://198.51.100.23:8000", username: "spx_user", password: "spx_pass" },
});
const page = await browser.newPage();
await page.goto("https://api.ipify.org");
console.log(await page.textContent("body")); // proxy IP
await browser.close();

Comment utiliser des IP différentes par contexte ?

Ajoutez l'option proxy à newContext, et seul ce contexte utilisera ce proxy. Le code ci-dessous récupère la liste via l'API, crée 3 contextes avec des IP différentes, et affiche l'IP visible dans chaque contexte. Pour gérer plusieurs comptes simultanément, associez un compte et une IP à chaque contexte.

Certaines versions de Chromium et les environnements Windows nécessitent parfois l'option proxy dans launch pour utiliser des proxies par contexte. Dans ce cas, ajoutez le premier proxy dans launch et remplacez-le pour chaque contexte.

import { chromium } from "playwright";

const KEY = "YOUR_API_KEY";
const res = await fetch("https://socks5proxy.io/api/v1/proxies/download?format=ip:port:user:pass&protocol=http", {
  headers: { Authorization: "Bearer " + KEY },
});
const lines = (await res.text()).trim().split("\n").slice(0, 3);

const browser = await chromium.launch();
for (const line of lines) {
  const [ip, port, user, pass] = line.trim().split(":");
  const context = await browser.newContext({
    proxy: { server: "http://" + ip + ":" + port, username: user, password: pass },
    locale: "en-US",
  });
  const page = await context.newPage();
  await page.goto("https://api.ipify.org");
  console.log(ip, await page.textContent("body"));
  await context.close();
}
await browser.close();

Comment utiliser un proxy SOCKS5 ?

Ajoutez simplement l'adresse socks5:// à server. Chromium ne prend pas en charge l'authentification par nom d'utilisateur et mot de passe pour les proxies SOCKS5, donc il est recommandé de se connecter avec l'authentification IP. Enregistrez l'IPv4 du serveur d'exécution dans le tableau de bord et utilisez uniquement server sans username et password.

Pour une connexion par identifiant/mot de passe, utilisez le port HTTP de la même IP. Le site cible verra la même localisation.

import { chromium } from "playwright";

const browser = await chromium.launch({
  proxy: { server: "socks5://198.51.100.23:1080" }, // server IP is authorized in the dashboard
});
const page = await browser.newPage();
await page.goto("https://api.ipify.org");
console.log(await page.textContent("body"));
await browser.close();

Comment l'utiliser en Python?

Playwright pour Python a la même structure. Ajoutez server, username et password dans le dictionnaire proxy. Un exemple synchrone est fourni ci-dessous. Les noms des options sont les mêmes pour la version asynchrone.

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(proxy={
        "server": "http://198.51.100.23:8000",
        "username": "spx_user",
        "password": "spx_pass",
    })
    page = browser.new_page()
    page.goto("https://api.ipify.org")
    print(page.text_content("body"))
    browser.close()

Comment faire apparaître les résultats comme un utilisateur local ?

Pour adapter Puppeteer au pays de l'IP, définissez à la fois le locale et le timezoneId dans le contexte pour que les pages soient rendues dans la langue et l'heure correspondant aux utilisateurs de ce pays. Par exemple, pour une IP allemande, utilisez locale de-DE et timezoneId Europe/Berlin.

Utilisez page.route pour économiser bande passante et temps en bloquant ces requêtes. Particulièrement utile pour les plans partagés avec quota mensuel.

  • Ajustez locale et timezoneId en fonction du pays de l'IP
  • Un contexte = un compte = une IP
  • Bloquer les requêtes d'images/vidéos inutiles avec page.route
  • SOCKS5 : autorisation par IP. HTTP : identifiant/mot de passe

Comment automatiser le téléchargement de la liste pour chaque tâche ?

GET /proxies de l'API renvoie en JSON chaque ligne avec l'IP, le port et le pays. En ajoutant un filtre pays, vous pouvez créer directement des listes adaptées à vos tâches par pays. Le code ci-dessous est un exemple pour obtenir uniquement les proxies américains et créer des contextes en fonction du nombre de tâches. Les noms des champs de réponse sont disponibles dans la documentation API.

Si vous avez beaucoup de travaux, ne gardez pas les contextes ouverts, fermez-les à la fin pour libérer la mémoire.

import { chromium } from "playwright";

const KEY = "YOUR_API_KEY";
const res = await fetch("https://socks5proxy.io/api/v1/proxies?country=us&protocol=http", {
  headers: { Authorization: "Bearer " + KEY },
});
const { proxies } = await res.json();

const browser = await chromium.launch();
for (const p of proxies.slice(0, 5)) {
  const context = await browser.newContext({
    proxy: { server: "http://" + p.host + ":" + p.http_port, username: p.username, password: p.password },
    locale: "en-US",
    timezoneId: "America/New_York",
  });
  const page = await context.newPage();
  await page.goto("https://api.ipify.org");
  console.log(await page.textContent("body"));
  await context.close();
}
await browser.close();

Comment économiser de la bande passante en bloquant les requêtes inutiles ?

Bloquer les requêtes d'images, de polices et de vidéos avec page.route ou context.route accélère l'ouverture des pages et économise la bande passante du proxy. C'est particulièrement efficace pour les tâches de collecte de données uniquement.

await context.route("**/*", (route) => {
  const type = route.request().resourceType();
  return ["image", "font", "media"].includes(type) ? route.abort() : route.continue();
});

Est-ce que le même proxy fonctionne avec Firefox et WebKit ?

Oui. Playwright prend en charge la même option proxy pour les trois navigateurs. Pour les équipes de test, vous pouvez lancer Chromium, Firefox et WebKit successivement avec le même proxy pour vérifier si les pages spécifiques à chaque pays sont identiques sur tous les navigateurs.

Firefox ne prend pas en charge l'authentification par nom d'utilisateur et mot de passe pour SOCKS5, comme Chromium. Utilisez donc l'autorisation IP pour vous connecter. Le port HTTP est pris en charge avec nom d'utilisateur et mot de passe dans les trois navigateurs.

Si vous utilisez Playwright Test, vous pouvez ajouter proxy dans la section use de playwright.config pour l'appliquer à tous les tests, ou diviser les projets par pays et attribuer un proxy différent à chacun.

import { defineConfig } from "@playwright/test";

export default defineConfig({
  projects: [
    { name: "us", use: { locale: "en-US", proxy: { server: "http://198.51.100.23:8000", username: "spx_user", password: "spx_pass" } } },
    { name: "de", use: { locale: "de-DE", proxy: { server: "http://198.51.100.24:8000", username: "spx_user", password: "spx_pass" } } },
  ],
});

Comment résoudre les erreurs courantes ?

net::ERR_PROXY_CONNECTION_FAILED signifie que l'adresse du serveur ou le port est incorrect. Pour les erreurs 407 ou d'authentification, vérifiez les valeurs de username et password. L'erreur 'Browser does not support socks5 proxy authentication' apparaît lorsque vous utilisez un nom d'utilisateur et un mot de passe avec SOCKS5. Passez à l'authentification IP ou utilisez le port HTTP.

Configuration du proxy dans Playwright, IP par navigateur et contexte | Socks5Proxy