Socks5Proxy

Playwright-Proxy-Einstellungen, Verbinden verschiedener IPs für jeden Browser und Kontext

Diese Anleitung zeigt für Playwright die Verbindung von Socks5Proxy-HTTP- und SOCKS5-Proxys über server, username, password sowie das Nutzen verschiedener IPs pro Browser-Kontext in Node.js und Python.

Was ist bei den Proxy-Einstellungen in Playwright am bequemsten?

Playwright akzeptiert die Proxy-Adresse, Benutzername und Passwort als eine einzige Proxy-Option, sodass Sie sich nicht separat um die Authentifizierungsfenster kümmern müssen. Die Option gilt für alle drei Browser: Chromium, Firefox und WebKit.

Sie können einen Browser mit mehreren Kontexten nutzen, die jeweils unterschiedliche Proxys verwenden. Kontexte sind separate Profile mit eigenen Cookies und Speicher, sodass ein Browser mehrere IPs und Sessions verwalten kann und Speicher spart.

Beispiel mit IP 198.51.100.23, HTTP-Port 8000, SOCKS5-Port 1080, Benutzername spx_user, Passwort spx_pass.

npm install playwright
npx playwright install chromium

Wie verbinde ich einen HTTP-Proxy mit dem gesamten Browser?

Proxy-Einstellungen in launch (server, username, password) gelten für alle Seiten. HTTPS-Verkehr wird über CONNECT-Tunnel verschlüsselt weitergeleitet.

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();

Wie verwendet man unterschiedliche IPs pro Kontext?

proxy in newContext legt IP pro Kontext fest. Dieses Beispiel erstellt drei Kontexte mit unterschiedlichen IPs (via API). Ideal für Multi-Account-Management: 1 Kontext = 1 Account + 1 IP.

Einige Chromium-Versionen und Windows-Umgebungen erfordern eine Proxy-Option in launch, um Proxy pro Kontext zu verwenden. In diesem Fall können Sie den ersten Proxy in launch setzen und für jeden Kontext überschreiben.

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();

Wie verwende ich einen SOCKS5-Proxy?

Verwenden Sie socks5:// als Serveradresse. Chromium unterstützt keine SOCKS5-Authentifizierung - nutzen Sie IP-Autorisierung (IPv4 im Dashboard registrieren) ohne Benutzername/Passwort.

Wenn Benutzername/Passwort erforderlich sind, können Sie den HTTP-Port derselben IP verwenden. Die Zielseite sieht dieselbe IP und Position.

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();

Wie verwendet man es in Python?

Playwright für Python hat die gleiche Struktur. Sie fügen server, username und password in das proxy-Wörterbuch ein. Ein synchrones Beispiel finden Sie unten. Die Optionen sind bei der asynchronen Methode gleich.

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()

Was muss angepasst werden, um Ergebnisse wie Nutzer aus dem jeweiligen Land aussehen zu lassen?

Stellen Sie das locale und timezoneId des Kontexts entsprechend dem IP-Land ein, damit die Seite in der Sprache und Zeit des Landes angezeigt wird. Zum Beispiel, für eine deutsche IP verwenden Sie locale de-DE und timezoneId Europe/Berlin.

Wenn Sie keine Bilder und Videos benötigen, können Sie diese Anfragen mit page.route blockieren, um Bandbreite und Zeit zu sparen. Dies ist besonders hilfreich bei gemeinsamen Plänen, bei denen die monatliche Bandbreite begrenzt ist.

  • Lokale Einstellungen und Zeitzone an IP-Land anpassen
  • Ein Konto, eine IP pro Kontext
  • Blockieren Sie unnötige Bild- und Videoanfragen mit page.route
  • SOCKS5: IP-Autorisierung, Benutzername/Passwort für HTTP-Port

Wie kann ich die Liste automatisch abrufen und für verschiedene Aufgaben aufteilen?

Die GET /proxies der API gibt für jede Zeile IP, Port und Land im JSON-Format zurück. Wenn Sie eine Länderbedingung hinzufügen, können Sie sofort eine Liste für länderbezogene Aufgaben erstellen. Der folgende Code ist ein Beispiel, das nur US-Proxys empfängt und Kontexte für die Anzahl der Aufgaben erstellt. Die Antwortfeldnamen finden Sie in der API-Dokumentation.

Wenn Sie viele Aufgaben haben, schließen Sie den Kontext nach Abschluss jeder Aufgabe, um Speicher freizugeben.

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();

Wie kann man unnötige Anfragen blockieren, um Bandbreite zu sparen?

page.route/context.route blockiert unnötige Ressourcen (Bilder, Fonts, Videos) - beschleunigt Seitenaufbau und spart Proxy-Bandbreite. Besonders effektiv für Datenextraktion.

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

Verwenden Firefox und WebKit denselben Proxy?

Ja. Playwright akzeptiert für alle drei Browser dieselben Proxy-Optionen. Testteams können nacheinander Chromium, Firefox und WebKit mit demselben Proxy starten, um länderspezifische Darstellungen browserübergreifend zu vergleichen.

Firefox unterstützt wie Chromium keine SOCKS5-Benutzername/Passwort-Authentifizierung im Browser, daher verbinden Sie SOCKS5 über IP-Autorisierung. HTTP-Ports können in allen drei Browsern mit Benutzername und Passwort verbunden werden.

Wenn Sie Playwright Test verwenden, können Sie den Proxy in den use-Eintrag der playwright.config einfügen, um ihn auf alle Tests anzuwenden, oder Projekte nach Ländern aufteilen und jeweils unterschiedliche Proxys verwenden.

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" } } },
  ],
});

Wie behebe ich häufige Fehler?

net::ERR_PROXY_CONNECTION_FAILED: Falsche Serveradresse/Port. 407-Fehler deuten auf Authentifizierungsprobleme hin. 'Browser does not support socks5 proxy authentication' tritt bei SOCKS5 mit Authentifizierung auf - wechseln Sie zu IP-Autorisierung oder HTTP-Port.

Playwright-Proxy-Einstellungen, Browser- und Kontext-spezifische IPs | Socks5Proxy