실행 수준 프록시#
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();지정된 게이트웨이가 지원되는 각 독립적 인 워크플로우에 대한 별도의 세션 식별자를 사용합니다. 연결 세부 사항의 허용 된 기간 및 위치 매개 변수를 확인하십시오. 요청 된 기간 전에 주거 장치가 차단 될 수 있습니다. 끈적한 세션은 일 동안 동일한 IP를 보장하지 않습니다. 고정 된 주소의 경우 전용 정적 인 제품을 비교하십시오.
Per-context 프록시#
브라우저에서 여러 국가 또는 세션을 실행하려면, placeholder 프록시를 실행하고 각 컨텍스트를 부여합니다. 크롬은 per-context 프록시에 대한 실행 수준 프록시를 필요로 합니다.
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" } });종료에 대한 상황에 일치#
각 컨텍스트는 해당 국가의 현지 및 시간대를 정합니다. IP, 언어 및 시계는 다음과 같습니다. locale=\"de-DE\", timezone_id=\"Europe/Berlin\" 베를린 컨텍스트의 경우. Mismatches는 IP 자체보다 더 강한 봇 신호입니다.
gigabytes 저장 : 당신이 필요로하지 않는 블록#
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();
});렌더링 된 페이지는 3 ~ 5 MB를 무게 할 수 있습니다. HTML 및 API는 100 킬로바이트를 호출합니다. 이 단일 규칙은 80 ~ 90 %의 청구서를 잘라냅니다.
검증 및 문제 해결#
- IP-echo 서비스를 먼저 열고 국가를 확인; 그 다음 도시에 대한 지리적 위치 파악.
- A
net::ERR_TUNNEL_CONNECTION_FAILED또는ERR_PROXY_CONNECTION_FAILED시작은 credentials 또는 매개변수가 잘못되었는지 의미합니다. cURL과 동일한 URL을 테스트하여 게이트웨이 코드를 읽습니다. - WebRTC는 당신이 그것을 막을 경우에만 Playwright 맥락에서 기본적으로 비활성화됩니다; 추가
--disable-webrtc개인 정보 보호 문제 때 스타일 경화 또는 블록 STUN.
자주 묻는 질문#
각 탭에는 다른 프록시가 있습니까?
각 컨텍스트를 할 수 있습니다; 탭 (페이지) 컨텍스트 내에서 프록시를 공유합니다. 세션 또는 국가 당 하나의 컨텍스트를 만듭니다.
Playwright가 SOCKS5 프록시를 인증합니까?
Chromium은 SOCKS5 자격 증명을 수용하지 않습니다. 사용자 이름과 암호로 포트 9000에 HTTP 프록시를 사용하거나 서버 IP를 화이트리스트하고 Sponge5://res.proxy-cyber.com:9001를 credentials없이 사용하십시오.