起動レベルのプロキシ#
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();割り当てられたゲートウェイがサポートする独立したワークフローごとに、個別のセッション ID を使用します。接続の詳細で、許可されている期間と場所のパラメーターを確認してください。住宅用デバイスは、要求された期間が経過する前に切断される可能性があります。スティッキー セッションは、何日間も同じ IP を保証するものではありません。固定アドレスの場合はスタティック専用品と比較してください。
コンテキストごとのプロキシ#
1 つのブラウザーで複数の国またはセッションを実行するには、プレースホルダー プロキシを使用して起動し、それぞれに独自のコンテキストを与えます。 Chromium がコンテキストごとのプロキシを尊重するには、起動レベルのプロキシが必要です。
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\" ベルリンの文脈で言えば。不一致は、IP 自体よりも強力なボット信号です。
ギガバイトを節約: 不要なものをブロックします#
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 は数百キロバイトを呼び出します。 GB 単位のネットワークでは、この 1 つのルールにより料金が 80 ~ 90 % 削減されます。
確認とトラブルシューティングを行う#
- まず IP エコー サービスを開き、国を確認します。次に、都市の地理位置情報を調べます。
- A
net::ERR_TUNNEL_CONNECTION_FAILEDまたはERR_PROXY_CONNECTION_FAILED起動時は、認証情報またはパラメータが間違っていることを意味します。 cURL を使用して同じ URL をテストし、ゲートウェイ コードを読み取ります。 - WebRTC は、ブロックした場合にのみ Playwright コンテキストでデフォルトで無効になります。追加する
--disable-webrtcプライバシーが重要な場合はスタイルを強化したり、STUN をブロックしたりできます。
人々が尋ねる質問#
各タブに異なるプロキシを設定できますか?
各コンテキストでは次のことができます。コンテキスト内のタブ (ページ) はプロキシを共有します。セッションまたは国ごとに 1 つのコンテキストを作成します。
Playwright は認証付きの SOCKS5 プロキシをサポートしていますか?
Chromium は SOCKS5 認証情報を受け入れません。ユーザー名とパスワードを指定してポート 9000 の HTTP プロキシを使用するか、サーバー IP をホワイトリストに登録して資格情報なしで sock5://res.proxy-cyber.com:9001 を使用します。