--proxy-serverの中の認証情報
Chromeはこの引数からユーザー名とパスワードをエラーも出さずに捨て、それなしで接続して、プロキシから407を受け取ります。するとページの読み込みが失敗し、認証の問題ではなくネットワークの問題のように見えます。
要点: Chromeでは
--proxy-server=http://HOST:PORTを引数として渡し、Firefoxではオプションに手動のProxyを設定します。Firefoxは、SeleniumのWebDriver BiDiハンドラーadd_authentication_handlerを使って、プロキシのパスワード要求に応答できます。Chromeは当社のテストではできませんでした。--proxy-server内の認証情報を無視し、2つのBiDiハンドラーはどちらもタイムアウトしました。Chromeでは、テストを実行するIPをプロキシのホワイトリストに登録してください。そうすれば、HTTPでもSOCKS5でもプロキシに認証情報は不要です。
Seleniumは自分で通信を中継するわけではありません。ブラウザを起動し、ブラウザのオプションの一部としてプロキシを渡します。そのため答えはChromeとFirefoxで異なり、多くの設定はプロキシの認証でつまずきます。
Chromeはコマンドラインのスイッチから、Firefoxはオプションのプロキシオブジェクトからプロキシを読み取ります。どちらも、ホワイトリスト登録済みのプロキシならそれ以上の設定なしで使えます。Firefoxは、WebDriver BiDiを通じてプロキシのパスワード要求に応答することもできます。当社のテストでは、Chromeはこれができませんでした。
マシンやCIランナーのローカルアドレスではなく、インターネットから見えるアドレスです。What Is My IPで確認できます。
API呼び出し1回(PUT /orders/ORDER_ID/whitelist)か、MCPサーバーのset_proxy_whitelistツールで行います。ダッシュボードにはまだ設定項目がありません。ホワイトリストにはIPv4アドレスを指定し、呼び出すたびにリストが置き換わります。ホワイトリストが設定されている間、プロキシは一覧にあるアドレスだけを受け入れ、その注文ではユーザー名とパスワードが使えなくなります。空のリストを送るとホワイトリストがオフになり、パスワードでのログインがふたたび使えるようになります。
「マイプロキシ」かAPIから取得します。ホワイトリストを設定していれば、ユーザー名とパスワードは必要ありません。
Chromeは--proxy-server=http://HOST:PORT、プロキシをSOCKS5に切り替えた後はsocks5://HOST:PORTです。Firefoxは、httpProxyとsslProxyを指定した手動のProxyです。
操作するブラウザでWhat Is My IPを一度開き、購入したアドレスが表示されることを確かめてから、テストスイートを実行します。
# The proxy has your machine's IP on its whitelist, so no credentials
# are sent: Chrome ignores them in --proxy-server anyway.
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("--headless=new") # remove to watch the browser
options.add_argument("--proxy-server=http://HOST:PORT")
driver = webdriver.Chrome(options=options)
try:
driver.get("https://example.com/")
print(driver.title)
finally:
driver.quit()
# Selenium 4.51+ with WebDriver BiDi; pip install selenium
from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType
options = webdriver.FirefoxOptions()
options.enable_bidi = True
options.add_argument("-headless") # remove to watch the browser
options.proxy = Proxy({
"proxyType": ProxyType.MANUAL,
"httpProxy": "HOST:PORT",
"sslProxy": "HOST:PORT",
})
driver = webdriver.Firefox(options=options)
try:
# Answers the proxy's 407 with your username and password
driver.network.add_authentication_handler(
lambda request: request.provide_credentials("USERNAME", "PASSWORD")
)
driver.get("https://example.com/")
print(driver.title)
finally:
driver.quit()
# The proxy has your machine's IP on its whitelist, so no credentials
# are sent. For a password instead, see selenium-firefox-auth.
from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType
options = webdriver.FirefoxOptions()
options.add_argument("-headless") # remove to watch the browser
options.proxy = Proxy({
"proxyType": ProxyType.MANUAL,
"httpProxy": "HOST:PORT",
"sslProxy": "HOST:PORT",
})
driver = webdriver.Firefox(options=options)
try:
driver.get("https://example.com/")
print(driver.title)
finally:
driver.quit()
# Switch the proxy to SOCKS5 first, then use the port the order shows.
# The whitelist applies to SOCKS5 as well, so no credentials here either.
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("--headless=new") # remove to watch the browser
options.add_argument("--proxy-server=socks5://HOST:PORT")
driver = webdriver.Chrome(options=options)
try:
driver.get("https://example.com/")
print(driver.title)
finally:
driver.quit()
# Put the public IPv4 address your code runs from on the proxy's
# whitelist. Replaces the list; an empty list turns whitelisting off
# and the proxy falls back to username and password.
curl -X PUT "https://api.proxyjam.com/public/v1/orders/ORDER_ID/whitelist" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"whitelisted_ips": ["YOUR_IP"]}'
Firefoxのパスワードのサンプルはユーザー名とパスワードを送るので、ホワイトリストを設定していない注文が必要です。ほかのブラウザのサンプルは、お客様のマシンのIPがプロキシのホワイトリストに登録されていることを前提にしています。SOCKS5のサンプルでは、先にプロキシをSOCKS5に切り替える必要もあり、切り替えると新しいポートが表示されます。大文字の部分をお客様の注文の値に置き換え、ホワイトリストの呼び出しではORDER_ID、YOUR_API_KEY、YOUR_IPも置き換えてください。
| HTTPプロキシ | SOCKS5プロキシ | ユーザー名とパスワード | |
|---|---|---|---|
| Chrome | --proxy-server=http://HOST:PORT | --proxy-server=socks5://HOST:PORT | --proxy-server内では無視される。ホワイトリストを使う |
| Firefox | httpProxyとsslProxyを指定したProxy | socksProxyとsocksVersion 5を指定したProxy | HTTPでは、add_authentication_handler(BiDi)で動作した |
| ChromeのBiDiハンドラー | add_auth_handlerとadd_authentication_handlerはどちらもタイムアウトした | 未検証 | 今後のSeleniumかChromeでこれが変わるまでは、ホワイトリストを使う |
Chromeはこの引数からユーザー名とパスワードをエラーも出さずに捨て、それなしで接続して、プロキシから407を受け取ります。するとページの読み込みが失敗し、認証の問題ではなくネットワークの問題のように見えます。
Firefoxのオプションにプロキシが設定されていると、Selenium Managerはドライバーを同じプロキシ経由で取得します。パスワードだけのプロキシでは、そのダウンロードがブラウザの起動前に失敗します。ホワイトリストなら成功します。
CIランナーは、お使いのノートPCとは別の公開IPから接続することが多く、実行のたびに変わるものもあります。テストを実行するアドレスをホワイトリストに登録し、それが変わったら更新してください。呼び出すたびにリストは置き換わります。
HTTPに設定されたアドレスはSOCKS5に応答しません。まず注文でプロキシを切り替え、その後に表示されるポートを使ってください。引数のスキームを変えるだけでは、ブラウザは接続できません。
Firefoxでは、WebDriver BiDiを有効にし、driver.network.add_authentication_handlerでユーザー名とパスワードを返すハンドラーを登録します。Selenium 4.51ではこれで動作しました。Chromeでは、当社のテストで認証情報を送る方法はどれも動作しませんでした。プロキシのスイッチに入れた認証情報は無視され、2つのBiDiハンドラーはどちらもタイムアウトしました。Chromeでは、テストを実行する公開IPをホワイトリストに登録してください。そうすれば、ブラウザは認証情報をまったく使わずに接続します。
ChromeOptionsを作成し、引数--proxy-server=http://HOST:PORTを追加して、そのオプションをwebdriver.Chromeに渡します。SOCKS5の場合は、注文でプロキシをSOCKS5に切り替え、その後に注文に表示されるポートでsocks5://HOST:PORTを使います。
はい。ホワイトリストに登録されたアドレスは、HTTPでもSOCKS5でも認証情報なしで受け入れられます。ChromeはSOCKS5のユーザー名とパスワードを送れないので、ChromeでSOCKS5を使えるのはこのためです。ホワイトリストはAPIかMCPサーバーで設定し、IPv4アドレスを指定します。 SOCKS5
はい、ドライバーごとに1つです。プロキシはドライバーの起動時のオプションの一部なので、2つのドライバーで2つのアドレスを使えます。実行中のChromeのプロキシを変えることはできないので、代わりに新しいドライバーを起動してください。
ありません。ドライバーは終了するまで起動時のアドレスを使い続け、アドレス自体も請求期間中ずっとお客様に割り当てられたままです。一度に多数の送信元が必要なテストスイートには、送信元を入れ替えるプールが必要ですが、それはまだ販売していません。
自社製品のエンドツーエンドテスト、自社ストアの地域別チェック、広告検証、価格調査、ブランド保護は、当社の適正利用ポリシーのもとで事前審査なしに行えます。CAPTCHA、ボット対策、レート制限、アカウント停止を破るためにブラウザを操作するのは別の話です。アドレスにそれはできず、それを試みることもポリシーで禁止しています。 適正利用ポリシー
--proxy-serverスイッチとそのスキーム