SeleniumBase UCモードプロキシが機能しない: 原因と解決策
苦情は常に同じです: UCモードはプロキシなしでCloudflareを突破し、プロキシを使用すると失敗する、またはIPがまったく変わらない。これらの症状には具体的な原因があり、どちらもSeleniumBaseのバグではありません。
seleniumbase uc mode proxyを検索すると、同じ3ページにたどり着きます: 3つの異なるプロキシサービスでIPが変わらないというStack Overflowの質問、GitHubの問題seleniumbase/SeleniumBase#3046(「UCモードがプロキシで機能しない」、バージョン4.29.9で2024年8月に提出、再現不可としてクローズ)、およびメンテナの回答が2文であるディスカッションスレッド: 認証付きプロキシにはChrome拡張が必要で、単に悪いプロキシを持っている可能性がある。その答えの両方の部分は正しく、それらを組み合わせるとほぼすべての失敗を説明します。ここに長いバージョンと原因を見つけるデバッグ順序があります。
見た目が同じ2つの異なる失敗
何かを変更する前に、どの問題を抱えているかを確認してください。修正方法は全く異なります。失敗A: 出口IPが変わらない。スクリプトが実行され、ページが読み込まれ、ターゲットはあなたの実際のアドレスを確認します — プロキシは経路にありませんでした。失敗B: プロキシは機能し、サイトがあなたをブロックする。UCモードはプロキシなしでCloudflareを通過し、プロキシを追加した瞬間にチャレンジループに入ります。これはまさに問題#3046が説明していることです。失敗Aは配管の問題です。失敗BはIPの評判の問題です。これらを別のものとして扱うことが、これらのスレッドがページを走る理由です。
認証付きプロキシが拡張を必要とする理由 — そしてそれがUCモードで重要な理由
Chromeにはプロキシの資格情報を提供するコマンドラインの方法がありません。--proxy-serverフラグは、埋め込んだuser:pass@を静かに破棄し、結果として生じる407チャレンジはWebDriverが触れられないネイティブダイアログとして表面化します。したがって、資格情報を含むプロキシ文字列を渡すと、SeleniumBaseはその場で小さなChrome拡張を生成し、一時フォルダに書き込み、起動時に読み込んでチャレンジに答えることができます。これがメンテナが言及したメカニズムであり、Seleniumでの認証付きプロキシに関するガイドで説明されているものと同じです。
UCモードはそれに動く部分を追加します: まずChromeを起動し、その後にパッチを当てたchromedriverを接続し、ステルスなアクション中にドライバーを切断します。拡張はそれらのどれよりも前に読み込まれなければならず、そうでない場合、何も例外を引き起こさずにChromeは直接閲覧し、失敗Aが発生します。通常の原因はバージョンドリフトです。Chrome 137は拡張の動作を変更し、SeleniumBaseがアップデートを出荷するまでプロキシ認証を破壊しました。古い固定バージョンと最新のChromeの組み合わせは毎回静かに失敗します。まずアップグレードし、次にデバッグしてください。
実際に機能するSeleniumBase UCモードプロキシ形式
形式の間違いが「プロキシが無視される」報告の驚くほどの割合を占めています。SeleniumBaseはプロキシをプレーン文字列として受け取り、資格情報の有無にかかわらず、DriverとSBマネージャーおよびコマンドラインで使用します:
from seleniumbase import Driver, SB
# Authenticated: SeleniumBase builds a proxy-auth extension for this
driver = Driver(uc=True, proxy="USER:PASS@gate.quantumproxies.io:PORT")
# IP-whitelisted: no credentials, no extension
with SB(uc=True, proxy="gate.quantumproxies.io:PORT") as sb:
sb.uc_open_with_reconnect("https://httpbin.org/ip", 4)
print(sb.get_text("body")) # must NOT be your own IP
# Same thing from pytest:
# pytest test_x.py --uc --proxy=USER:PASS@gate.quantumproxies.io:PORT
これに従う3つのルールがあります。文字列をhttp://でラップし、同時に資格情報を含めないでください — USER:PASS@HOST:PORTが文書化された形です。資格情報付きのSOCKS5が全く機能しないことを期待しないでください: それはChromiumの制限であり、Playwright SOCKS5認証でカバーしているものと同じであり、どのフレームワークもそれを回避するパッチを持っていません。そして、パスワードに@または:が含まれている場合は、パーサーをデバッグするのではなく、英数字に回転させてください。
失敗クラス全体を取り除く修正
スクレイパーを実行しているマシンが安定したパブリックIPを持っている場合、リクエストの代わりにそれを認証します。アドレスをプロバイダーに登録してください — すべてのQuantumProxiesプランはユーザー:パスワードと並んでIPホワイトリストをサポートしています — それから単なるhost:portを渡します。資格情報がないということは拡張がないということです: Chromeのアップデートで壊れるコンポーネントが1つ減り、目立たないブラウザにロードされるファイルが1つ減ります。VPSでは、これはこの投稿で最も価値のある変更です。
制限は技術的ではなくトポロジー的です: ホワイトリストはマシンを認証するため、オートスケールされたコンテナ、CIランナー、および回転するNATの背後にあるものは依然として資格情報が必要です。それらには、拡張パスを維持し、SeleniumBaseを最新の状態に保ちます。

UCモードを非難する前に出口IPを確認してください
これはステップゼロであり、多くの人がそれをスキップします。ステルス設定に触れる前に、プロキシを通じてトラフィックが出ることを証明してください。まずブラウザの外で同じ資格情報をテストしてください — curlがそれを使用できない場合、どのフレームワークも使用できません:
# 1. Does the proxy work at all, outside any browser?
curl -x http://USER:PASS@gate.quantumproxies.io:PORT https://httpbin.org/ip
# 2. Is the toolchain current? (Chrome 137+ broke older extension handling)
pip install -U seleniumbase && sbase get chromedriver
# 3. Does the proxy work WITHOUT the stealth patches?
python -c "from seleniumbase import Driver; \
d=Driver(proxy='USER:PASS@gate.quantumproxies.io:PORT'); \
d.get('https://httpbin.org/ip'); \
print(d.find_element('tag name','body').text); d.quit()"
ステップ1が失敗した場合、問題はプロキシまたは資格情報です。ステップ1が合格し、ステップ3が失敗した場合、問題は拡張またはChromeのバージョンです。両方が合格し、uc=Trueだけが失敗した場合、その時にのみUCモードの相互作用です。実際に取得した出口を知ることは、取得したことを知ることと同じくらい重要です: 無料のIP品質チェッカーはアドレス、そのタイプおよびその評判を報告します。これは「プロキシが機能する」と「プロキシが通過する」の違いです。
プロキシが機能し、Cloudflareが依然として勝つ場合
これは失敗Bであり、何かのバグではありません。UCモードはブラウザを人間のように見せますが、ネットワークを住宅用のように見せることはできません。すでに100以上のスクレイパーが燃やしたデータセンターサブネットを通じてステルスブラウザをルートすると、決して解決しないハードバージョンのチャレンジを受けます。どのブラウザフレームワークもそれを解決できません。なぜなら、指紋が読み取られる前に判決が下されるからです。Cloudflareエラー1020およびスクレイピング中のCAPTCHA回避に関する私たちのメモはすべて同じ場所に着地します: CAPTCHAは症状であり、IPの評判が原因です。
結果を変える3つのこと。住宅用IPに移行する: 200以上の国にわたる実際の家庭の住所は、データセンターの範囲が持てない評判を持っています。ログインやカートがあるものにはスティッキーセッションを使用してください。フロー中の回転はセッションハイジャックと見なされ、回転する出口は広範なステートレスクロールに使用します。そして、出口国をエミュレートするロケールに合わせてください — ドイツの出口にen-USロケールとニューヨークのタイムゾーンがあると異常と見なされます。
2つの環境の詳細がループを閉じます。UCモードはヘッドレスモードで検出可能なので、Linuxでは仮想ディスプレイ(xvfb=True)を使用してください。headless=Trueではありません — これがいくつかの「Windowsで動作し、Ubuntuでクラッシュする」報告がディスプレイが修正されると解決する理由であり、uc_gui_click_captcha()のようなPyAutoGUIベースのヘルパーが何かをクリックするためにディスプレイを必要とする理由です。そして、認証プロキシでincognito=Trueを両方の方法でテストしてください: 拡張とインコグニートは脆弱なペアであり、資格情報は拡張に乗ります。

デバッグチェックリスト、順序
- 出口IPが変わったことを確認してください。 IPエコーエンドポイントをロードして読み取ります。これが通過するまで、以下のすべては無意味です。
- ブラウザの外でプロキシをテストする curlまたはrequestsを使用して、まったく同じ資格情報を使用します。
- SeleniumBaseとドライバーをアップグレードする。 Chrome 137の拡張変更は古いバージョンでプロキシ認証を破壊しました。
- 一時的に
uc=Trueを削除する。 プロキシがプレーンモードで機能する場合、相互作用を特定しました。 - ボックスに固定アドレスがある場合、IPホワイトリストに切り替える — これにより、拡張が完全に画像から削除されます。
- Linuxではxvfbを使用し、ヘッドレスではない — UCモードはヘッドレスで検出可能であり、CAPTCHAヘルパーはディスプレイを必要とします。
- 今だけステルス設定を変更する: インコグニートを切り替え、
reconnect_timeを上げ、次にプロキシタイプを変更します。
CDPモード、プレーンUCモードの文書化された後継は、これのどれも変更しません: プロキシ制約はChromeから来ており、フレームワークからではないため、同じチェックリストが適用されます。認証付きプロキシをサポートするクロスフレームワークビューについては、アンチディテクトフレームワークプロキシマップが並べて示しています。
よくある質問
SeleniumBase UCモードでIPが変わらないのはなぜですか?
ほとんどの場合、プロキシ認証拡張が読み込まれなかったため、Chromeが直接閲覧したからです。それが起こったとき、何もエラーを引き起こしません。SeleniumBaseをアップグレードし、プロキシ文字列がUSER:PASS@HOST:PORTであることを確認し、curlで同じ資格情報をテストしてください。マシンが安定したパブリックIPを持っている場合、それをホワイトリストに登録し、資格情報を完全に削除してください。
なぜUCモードはプロキシなしでCloudflareをバイパスできるのに、プロキシを使用するとできないのですか?
あなた自身の接続がクリーンな評判を持っており、プロキシ出口がそうでないからです。共有データセンターの範囲は厳しくフラグが立てられており、フラグが立てられたIPは自動化ではクリアできないハードチャレンジを受けます。ジョブを住宅またはモバイルの出口に移し、ステルス設定を変更する前に再テストしてください — ブラウザは問題ではありませんでした。
SeleniumBase UCモードはSOCKS5プロキシと連携しますか?
資格情報なしでは、はい。資格情報がある場合は、いいえ — ChromiumはSOCKS5のユーザー名/パスワード認証を実装したことがないため、Seleniumファミリーフレームワークはそれを追加できません。同じゲートウェイのHTTPエンドポイントを資格情報付きで使用するか、IPをホワイトリストに登録し、SOCKS5エンドポイントを認証なしで維持してください。
UCモードをヘッドレスモードでプロキシと一緒に実行できますか?
できますが、そうすべきではありません。UCモードはヘッドレスモードで検出可能であり、CAPTCHAヘルパーメソッドはPyAutoGUIを通じてマウスを駆動するため、実際のディスプレイが必要です。Linuxサーバーでは仮想ディスプレイ用にxvfb=Trueを使用してください。その組み合わせがメンテナンスされた例がターゲットとしているものです。
SeleniumBaseでプロキシ回転を使用する方法は?
リストを管理するのではなく、回転ゲートウェイを指してください: 各新しい接続はプールから異なる出口を取得し、コードの変更はありません。複数のページにわたって1つのアイデンティティを保持する必要があるフローの場合、ユーザー名パラメータでスティッキーセッションを要求し、セッションウィンドウのために出口を保持し、アイデンティティごとに新しいドライバーを開始してください。
UCモードはあなたのプロキシと戦っているのではありません。それはステルス起動シーケンスをChromeが自動化用に設計していない資格情報メカニズムの上に積み上げ、燃え尽きたIPがその仕事を終わらせます。ホワイトリストによって拡張を削除し、他の何かに触れる前に出口を確認し、すでに使い果たされていないIPをブラウザに与えてください。