Proxy a livello di lancio#
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(proxy={
"server": "http://res.proxy-cyber.com:9000",
"username": "USER-cc-us-sid-run1-ttl-30m",
"password": "PASS",
})
page = browser.new_page()
page.goto("https://api.ipify.org")
print(page.inner_text("body"))
browser.close()import { chromium } from "playwright";
const browser = await chromium.launch({
proxy: { server: "http://res.proxy-cyber.com:9000", username: "USER-cc-us-sid-run1-ttl-30m", password: "PASS" },
});
const page = await browser.newPage();
await page.goto("https://api.ipify.org");
console.log(await page.innerText("body"));
await browser.close();Utilizza un identificatore di sessione distinto per ciascun flusso di lavoro indipendente, laddove il gateway assegnato lo supporti. Conferma la durata consentita e i parametri di posizione nei dettagli della connessione. Un dispositivo residenziale può disconnettersi prima della durata richiesta; una sessione persistente non è garanzia dello stesso IP per giorni. Per un indirizzo fisso, confronta un prodotto statico dedicato.
Proxy per contesto#
Per eseguire diversi paesi o sessioni in un browser, avvia con un proxy segnaposto e assegna a ciascun contesto il proprio. Chromium necessita che il proxy a livello di lancio per i proxy per contesto venga rispettato.
browser = p.chromium.launch(proxy={"server": "http://per-context"})
de = browser.new_context(proxy={"server": "http://res.proxy-cyber.com:9000", "username": "USER-cc-de-city-berlin-sid-de1-ttl-30m", "password": "PASS"})
us = browser.new_context(proxy={"server": "http://res.proxy-cyber.com:9000", "username": "USER-cc-us-state-tx-sid-us1-ttl-30m", "password": "PASS"})const browser = await chromium.launch({ proxy: { server: "http://per-context" } });
const de = await browser.newContext({ proxy: { server: "http://res.proxy-cyber.com:9000", username: "USER-cc-de-city-berlin-sid-de1-ttl-30m", password: "PASS" } });
const us = await browser.newContext({ proxy: { server: "http://res.proxy-cyber.com:9000", username: "USER-cc-us-state-tx-sid-us1-ttl-30m", password: "PASS" } });Abbina il contesto all'uscita#
Assegna a ciascun contesto le impostazioni locali e il fuso orario del relativo paese, in modo che IP, lingua e orologio siano d'accordo: locale=\"de-DE\", timezone_id=\"Europe/Berlin\" per il contesto berlinese. Le discrepanze sono un segnale bot più forte dell'IP stesso.
Risparmia gigabyte: blocca ciò che non ti serve#
def block(route):
if route.request.resource_type in {"image", "media", "font", "stylesheet"}:
return route.abort()
return route.continue_()
page.route("**/*", block)await page.route("**/*", (route) => {
const t = route.request().resourceType();
return ["image", "media", "font", "stylesheet"].includes(t) ? route.abort() : route.continue();
});Una pagina renderizzata può pesare da 3 a 5 MB; le sue chiamate HTML e API richiedono poche centinaia di kilobyte. Su una rete per GB questa singola regola riduce la bolletta dall'80 al 90%.
Verificare e risolvere i problemi#
- Apri prima un servizio IP-echo e controlla il paese; quindi guarda una ricerca di geolocalizzazione per la città.
- A
net::ERR_TUNNEL_CONNECTION_FAILEDoERR_PROXY_CONNECTION_FAILEDall'avvio significa che le credenziali o un parametro sono errati; testare lo stesso URL con cURL per leggere il codice del gateway. - WebRTC è disabilitato per impostazione predefinita nei contesti Drammaturgo solo se lo blocchi; aggiungere
--disable-webrtcrafforzamento dello stile o blocco dello STUN quando la privacy è importante.
Domande che le persone fanno#
Ogni scheda può avere un proxy diverso?
Ogni contesto può; le schede (pagine) all'interno di un contesto condividono il suo proxy. Crea un contesto per sessione o paese.
Playwright supporta i proxy SOCKS5 con autenticazione?
Chromium non accetta le credenziali SOCKS5; utilizza il proxy HTTP sulla porta 9000 con nome utente e password oppure inserisci nella whitelist l'IP del tuo server e utilizza calzini5://res.proxy-cyber.com:9001 senza credenziali.