Proxy poziomu startowego#
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();Użyj odrębnego identyfikatora sesji dla każdego niezależnego przepływu pracy, jeśli obsługuje go przypisana brama. Potwierdź dozwolony czas trwania i parametry lokalizacji w szczegółach połączenia. Urządzenie domowe może odłączyć się przed żądanym czasem trwania; sesja lepka nie gwarantuje tego samego adresu IP przez kilka dni. Aby uzyskać stały adres, porównaj dedykowany produkt statyczny.
Proxy kontekstowe#
Aby uruchomić kilka krajów lub sesji w jednej przeglądarce, uruchom ją z zastępczym serwerem proxy i nadaj każdemu kontekstowi własny kontekst. Chromium potrzebuje serwera proxy na poziomie uruchamiania, aby proxy dla poszczególnych kontekstów były honorowane.
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" } });Dopasuj kontekst do wyjścia#
Nadaj każdemu kontekstowi lokalizację i strefę czasową swojego kraju, aby adres IP, język i zegar były zgodne: locale=\"de-DE\", timezone_id=\"Europe/Berlin\" dla kontekstu berlińskiego. Niedopasowania są silniejszym sygnałem bota niż sam adres IP.
Zapisz gigabajty: blokuj to, czego nie potrzebujesz#
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();
});Wyrenderowana strona może ważyć od 3 do 5 MB; jego HTML i API zajmują kilkaset kilobajtów. W sieci opartej na GB ta pojedyncza reguła obniża rachunek o 80 do 90%.
Weryfikacja i rozwiązywanie problemów#
- Najpierw otwórz usługę IP-echo i sprawdź kraj; następnie spójrz na wyszukiwanie geolokalizacyjne miasta.
- A
net::ERR_TUNNEL_CONNECTION_FAILEDlubERR_PROXY_CONNECTION_FAILEDprzy uruchomieniu oznacza, że dane uwierzytelniające lub parametr są nieprawidłowe; przetestuj ten sam adres URL za pomocą cURL, aby odczytać kod bramy. - WebRTC jest domyślnie wyłączony w kontekstach Playwright tylko wtedy, gdy go zablokujesz; dodaj
--disable-webrtctwardzenie stylu lub blokować STUN, gdy prywatność ma znaczenie.
Pytania, które ludzie zadają#
Czy każda zakładka może mieć inny proxy?
Każdy kontekst może; karty (strony) wewnątrz kontekstu współdzielą swoje proxy. Utwórz jeden kontekst na sesję lub kraj.
Czy Playwright obsługuje proxy SOCKS5 z uwierzytelnianiem?
Chromium nie akceptuje danych uwierzytelniających SOCKS5; użyj serwera proxy HTTP na porcie 9000, podając nazwę użytkownika i hasło, lub umieść adres IP swojego serwera na białej liście i użyj skarpetki5://res.proxy-cyber.com:9001 bez poświadczeń.