Socks5Proxy

Configurazione proxy in Playwright, collegamento di IP diversi per browser e contesto

Questa guida spiega come collegare i proxy HTTP e SOCKS5 di Socks5Proxy alle opzioni proxy di Playwright con server, username e password, e come usare IP diversi per contesto in un browser, con codice Node.js e Python.

Qual è il modo più comodo per configurare il proxy in Playwright?

Playwright accetta l'indirizzo proxy, il nome utente e la password come un'unica opzione proxy, quindi non è necessario gestire separatamente la finestra di autenticazione. L'opzione è la stessa per Chromium, Firefox e WebKit.

Inoltre, quando esegui un solo browser e crei più contesti al suo interno, puoi assegnare un proxy diverso a ciascun contesto. I contesti sono profili separati con cookie e archiviazione isolati, quindi puoi gestire più IP e sessioni con un solo browser, risparmiando memoria.

L'esempio usa IP 198.51.100.23, porta HTTP 8000, porta SOCKS5 1080, username spx_user e password spx_pass.

npm install playwright
npx playwright install chromium

Come posso collegare un proxy HTTP all'intero browser?

Aggiungi server, username e password alle opzioni proxy di launch per utilizzare lo stesso proxy su tutte le pagine di quel browser. I siti HTTPS vengono passati attraverso un tunnel CONNECT cifrato.

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

Come utilizzare IP diversi per ogni contesto?

Aggiungi l'opzione proxy a newContext per utilizzare quel proxy solo per quel contesto. Il codice seguente riceve un elenco tramite API, crea 3 contesti con IP diversi e stampa l'IP visibile in ciascun contesto. Per gestire più account contemporaneamente, associa un account e un IP a ciascun contesto.

Alcune versioni di Chromium e ambienti Windows richiedono l'opzione proxy anche in launch per utilizzare proxy separati per contesto. In questi casi, è sufficiente inserire il primo proxy in launch e sovrascriverlo per ogni contesto.

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

Come si usa un proxy SOCKS5?

Inserisci l'indirizzo socks5:// nel server. Chromium non supporta l'autenticazione username e password per SOCKS5, quindi consigliamo di connettersi con autenticazione IP per SOCKS5. Registra l'IPv4 del server di esecuzione nel dashboard e inserisci solo server senza username e password.

Se serve username e password, usa la porta HTTP dello stesso IP. Il sito di destinazione vedrà lo stesso IP e posizione.

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

Come si usa in Python?

Playwright per Python ha la stessa struttura. Inserisci server, nome utente e password nel dizionario proxy. Di seguito è riportato un esempio sincrono. I nomi delle opzioni sono gli stessi anche per il metodo asincrono.

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

Cosa bisogna allineare per far apparire i risultati come quelli di un utente di quel paese?

Imposta sia locale che timezoneId del contesto in base al paese dell'IP per visualizzare la pagina nella lingua e nel fuso orario degli utenti di quel paese. Ad esempio, per un IP tedesco, usa locale de-DE e timezoneId Europe/Berlin.

Se non sono necessari immagini e video, puoi bloccare queste richieste con page.route per risparmiare banda e tempo. Soprattutto utile per piani condivisi che hanno una banda mensile limitata.

  • Imposta locale e timezoneId in base al paese dell'IP
  • Un contesto, un account, un IP
  • Blocca le richieste di immagini e video non necessarie con page.route
  • SOCKS5 con autorizzazione IP, username e password sulla porta HTTP

Come scaricare automaticamente l'elenco e dividerlo per ogni attività?

GET /proxies dell'API restituisce in JSON per ogni riga IP, porta e paese. Filtra per paese per creare liste adatte a lavori specifici. Questo codice crea contesti per proxy USA in base al numero di lavori. I campi sono documentati.

Se hai molti lavori, non lasciare i contesti aperti fino alla fine, ma chiudili quando il lavoro è completato per liberare memoria.

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

Come risparmiare larghezza di banda bloccando le richieste non necessarie?

Bloccare le richieste di immagini, font e video con page.route o context.route accelera l'apertura della pagina e risparmia larghezza di banda del proxy. È particolarmente efficace per le attività di raccolta dati.

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

Si può usare lo stesso proxy su Firefox e WebKit?

Sì. Playwright accetta la stessa opzione proxy per tutti e tre i browser. Se hai un team di test, puoi utilizzare lo stesso proxy per aprire Chromium, Firefox e WebKit in sequenza e verificare che le pagine siano coerenti tra i browser.

Come Chromium, Firefox non supporta l'autenticazione SOCKS5 con username e password nel browser, quindi connettiti tramite autorizzazione IP. La porta HTTP si connette con username e password in tutti e tre i browser.

Se usi Playwright Test, puoi inserire proxy nella sezione use di playwright.config per applicarlo a tutti i test o dividere i progetti per paese e assegnare proxy diversi a ciascuno.

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

Come risolvere gli errori più frequenti?

net::ERR_PROXY_CONNECTION_FAILED indica che l'indirizzo o la porta del server sono errati. Gli errori 407 o relativi all'autenticazione richiedono la verifica dei valori di username e password. L'errore 'Browser does not support socks5 proxy authentication' si verifica quando si inseriscono username e password per SOCKS5. Cambia in autenticazione IP o utilizza la porta HTTP.

Configurazione proxy in Playwright, IP per browser e contesto | Socks5Proxy