Proxy på startnivå#
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();Använd en separat sessionsidentifierare för varje oberoende arbetsflöde, där den tilldelade gatewayen stöder det. Bekräfta tillåtna parametrar för varaktighet och plats i anslutningsinformationen. En bostadsenhet kan kopplas bort före begärd varaktighet; en fast session är inte en garanti för samma IP-adress under flera dagar. För en fast adress jämför med en dedikerad statisk produkt.
Proxyservrar per sammanhang#
För att köra flera länder eller sessioner i en webbläsare, starta med en platshållare proxy och ge varje sammanhang sin egen Chromium behöver startnivåproxyn för per-kontext proxies för att respekteras.
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" } });Matcha sammanhanget med utgången#
Ge varje kontext den lokala inställningen och tidszonen för landet så att IP, språk och klocka stämmer: locale=\"de-DE\", timezone_id=\"Europe/Berlin\" Missmatchningar är en starkare botsignal än själva IP-adressen, vilket gör att det inte går att identifiera den.
Spara gigabyte: blockera det du inte behöver#
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();
});En renderad sida kan väga 3 till 5 MB, dess HTML och API-anrop några hundra kilobyte.På ett per GB nätverk denna enda regel minskar räkningen med 80 till 90 %.
Verifiera och felsök#
- Öppna en IP-echo service först och kontrollera landet; sedan titta på en geolocation lookup för staden.
- A
net::ERR_TUNNEL_CONNECTION_FAILEDellerERR_PROXY_CONNECTION_FAILEDvid start innebär att referenser eller en parameter är fel. Testa samma URL med cURL för att läsa gateway-koden. - WebRTC är inaktiverad som standard i Playwright sammanhang endast om du blockerar den; lägg till
--disable-webrtcstilhärdning eller blockera STUN när integritet är viktigt.
Frågor som folk ställer#
Kan varje flik ha en annan proxy?
Varje kontext kan; flikar (sidor) i en kontext dela sin proxy.Skapa ett sammanhang per session eller land.
Stöder Playwright SOCKS5-proxyservrar med autentisering?
Chromium accepterar inte SOCKS5-autentiseringsuppgifter; använd HTTP-proxyn på port 9000 med användarnamn och lösenord, eller vitlista din server IP och använd socks5://res.proxy-cyber.com:9001 utan autentiseringsinformation.