プロキシと geoip
ブラウザを自分のプロキシ経由にします。ライセンスビルドではユーザー名とパスワード付きの SOCKS5 も使えます。geoip を使えば、タイムゾーン、言語、WebRTC アドレスをプロキシの出口 IP に合わせられます。
プロキシの地域に自動で合わせる(geoip)
プロキシと一緒に geoip を渡すと、SDK はプロキシの出口 IP をオフラインの geoip-all-in-one データベースで調べ、その地域に合った整合性のあるタイムゾーン + navigator の主言語 + Accept-Language + WebRTC IP を設定します。プロキシごとにタイムゾーンを手作業で合わせる必要はもうありません。
from clearcote import launch
browser = launch(
fingerprint="user-7423",
proxy={"server": "http://host:8080", "username": "u", "password": "p"},
geoip=True, # timezone + language auto-matched to the proxy's region
)その地域の位置情報と、navigator.languages の完全なリストも設定します。HTTP と SOCKS5 のプロキシ(認証情報付きも含む)で動作し、3 つの SDK すべてで使えます(.NET では Geoip = true)。初回実行時にデータベース(約 50 MB)をダウンロードします。地域を解決できない場合、このマシンの時計や言語のまま黙って起動するのではなく、GeoipError で起動を中止します。それでも起動したい場合は、timezone と acceptLanguage の両方を設定してください。ルックアップの制限時間は 20 秒(CLEARCOTE_GEOIP_TIMEOUT_SECONDS)で、.NET ではエラーは GeoipException になります。geoip も明示的な timezone もない場合、タイムゾーンは言語に従います。en-US なら、ドイツのプロキシ経由でもニューヨークになります。
自分で設定したい場合は、acceptLanguage(Node)/ accept_language(Python)を使います(例:"en-US,en")。これで Accept-Language ヘッダー、navigator.languages 配列全体、navigator.language が設定され、Intl / toLocaleString もそれに従います。
認証付き SOCKS5
標準の Chromium は、SOCKS5 プロキシへの認証がまったくできません(ユーザー名/パスワードのサブネゴシエーションが実装されていません)。そのため、認証情報を保持するローカルリレーを挟むのが一般的な対処法です。ライセンスビルドはこれをエンジン内に実装している(RFC 1929)ので、リレーは不要です。ユーザー名とパスワードは、個別のフィールドとしてもアドレス内(socks5://user:pass@host:port)にも指定でき、どちらの場合も SDK がエンジンに渡します。アドレス内の認証情報には SDK 0.31.1 以降が必要です。それより古い SDK では Playwright が認証情報を落としてしまい、プロキシ側にはログインが届いていませんでした。
from clearcote import launch_persistent_context
ctx = launch_persistent_context(
"./profile",
proxy={"server": "socks5://proxy.example.net:1080", "username": "user", "password": "pass"},
)
page = ctx.pages[0] if ctx.pages else ctx.new_page()
page.goto("https://api.ipify.org?format=json") # confirm the exit IP is the proxy'sライセンスビルド(「GitHub で無料」または Pro、エンジン 151 r14 以降)が必要です。オープンビルドは SOCKS5 プロキシへの認証ができないため、ローカルリレーか HTTP プロキシと組み合わせて使ってください。
セッションを信頼する前に、必ず出口アドレスを確認してください。黙ってフェイルオープンするプロキシは自分の IP からトラフィックを送ってしまい、ほかのあらゆる対策が無意味になります。問題ないと決めつけず、起動時に一度、アクセス元のアドレスを返すサービスで確認してください。