serverの文字列に認証情報を書く
Playwrightはユーザー名とパスワードをそれぞれ専用のフィールドから読み取ります。代わりにserverのURLに書くと、まったく送られません。当社のテストでは、最初のナビゲーションがタイムアウトするまで止まったままで、認証情報が原因だと示すメッセージは出ませんでした。
要点: server、username、passwordを持つproxyをchromium.launchに渡すか、1つのコンテキストに限定するならbrowser.new_contextに渡します。HTTPでは、3つのエンジンすべてがこれらのフィールドで認証します。SOCKS5では、どのエンジンもユーザー名とパスワードを受け付けず、Playwrightは起動を拒否します。お客様のIPをプロキシのホワイトリストに登録し、socks5://のserverだけを渡してください。
Playwrightは1つのAPIでChromium、Firefox、WebKitを操作し、プロキシはブラウザやコンテキストを作成するときの設定の一部です。そのため1つのスクリプトで複数のアドレスを簡単に使えますが、ここに唯一の厳しい制限もあります。パスワード付きのSOCKS5です。
Pythonのサンプルは、ブラウザ全体にプロキシを設定してChromiumを起動します。コンテキストごとのサンプルは、代わりに1つのコンテキストに限定します。エンジンを切り替えるには、chromiumをfirefoxかwebkitに変えるだけで、proxyオブジェクトはそのままです。
プロキシがHTTPで通信する場合、3つのエンジンはプロキシの407に対して、proxyオブジェクトのユーザー名とパスワードで応答します。SOCKS5プロキシには、どのエンジンもそうした応答をしません。そのため、SOCKS5のサンプルには認証情報がなく、ホワイトリストを前提にしています。
プロキシを1つのページだけに付けることはできません。単位はコンテキストです。アドレスごとに1つのコンテキストを作成し、そのアドレスを共有すべきページをその中で開きます。Playwrightではコンテキストの作成は軽いので、1つのストアを3か国から確認するスクリプトは、3つのコンテキストを持ち、それぞれを別々の注文から作ります。
proxyオブジェクトはbypassフィールドも受け取ります。直接接続すべきホストをカンマ区切りで並べたリストです。自社の社内サービスやローカルのテストサーバーに使えば、外部に向けた通信だけが、お支払いいただいているアドレスから出ていくようになります。
ダッシュボードの「マイプロキシ」か、APIの注文情報から取得します。アドレスごとに、専用の4つの値があります。
launchで渡すと、ブラウザ全体がプロキシを使います。new_contextで渡すと、そのコンテキストだけが使うので、1つのスクリプトで複数のコンテキストを別々のアドレス経由で動かせます。
{"server": "http://HOST:PORT", "username": "USERNAME", "password": "PASSWORD"}です。認証情報はそれぞれ専用のフィールドに入れ、serverのURLの中には決して書きません。
PlaywrightはSOCKS5プロキシにログインできません。注文をSOCKS5に切り替え、コードのタブにあるホワイトリストの呼び出しでお客様のマシンのIPを登録し、新しいポートを使ったsocks5://HOST:PORTだけを残してください。ホワイトリストが設定されている間、プロキシは一覧にあるアドレスだけを受け入れ、その注文ではユーザー名とパスワードが使えなくなります。空のリストを送るとホワイトリストがオフになり、パスワードでのログインがふたたび使えるようになります。
本番の実行の前に、そのブラウザかコンテキストのページでWhat Is My IPを一度開きます。
# pip install playwright && playwright install chromium
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(proxy={
"server": "http://HOST:PORT",
"username": "USERNAME",
"password": "PASSWORD",
})
page = browser.new_page()
page.goto("https://example.com/")
print(page.title())
browser.close()
// npm i playwright && npx playwright install chromium
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch({
proxy: {
server: 'http://HOST:PORT',
username: 'USERNAME',
password: 'PASSWORD',
},
});
const page = await browser.newPage();
await page.goto('https://example.com/');
console.log(await page.title());
await browser.close();
})();
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
# The proxy belongs to this context only; another context can use
# a different address, or none.
context = browser.new_context(proxy={
"server": "http://HOST:PORT",
"username": "USERNAME",
"password": "PASSWORD",
})
page = context.new_page()
page.goto("https://example.com/")
print(page.title())
browser.close()
# Switch the proxy to SOCKS5 and put your machine's IP on its whitelist:
# Chromium cannot send a SOCKS5 username and password.
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(proxy={"server": "socks5://HOST:PORT"})
page = browser.new_page()
page.goto("https://example.com/")
print(page.title())
browser.close()
# 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"]}'
Python版とNode版のPlaywright 1.64で動かしました。HTTPのサンプルはユーザー名とパスワードを送るので、ホワイトリストを設定していない注文が必要です。SOCKS5のサンプルはホワイトリストを前提とし、先にプロキシをSOCKS5に切り替える必要があります。切り替えると新しいポートが表示されます。大文字の部分をお客様の注文の値に置き換えてください。
| HTTPとパスワード | SOCKS5とパスワード | SOCKS5、ホワイトリスト登録済み | |
|---|---|---|---|
| Chromium | 動作する | 起動時に拒否 | 動作する |
| Firefox | 動作する | 起動時に拒否 | 動作する |
| WebKit | 動作する | 起動時に拒否 | 動作する |
Playwrightはユーザー名とパスワードをそれぞれ専用のフィールドから読み取ります。代わりにserverのURLに書くと、まったく送られません。当社のテストでは、最初のナビゲーションがタイムアウトするまで止まったままで、認証情報が原因だと示すメッセージは出ませんでした。
どのエンジンもSOCKS5の認証を拒否し、そのエラーはページが開く前の起動時に出ます。別のライブラリを使っても解決しません。スクリプトを実行するIPをホワイトリストに登録し、認証情報を外してください。
ページはそのコンテキストのプロキシを共有し、コンテキストは専用のプロキシを指定されない限りブラウザのプロキシを共有します。2つのアドレスを並行して使うには、それぞれにプロキシを指定した2つのコンテキストを作成します。
ポートの打ち間違いや、HTTPのままのプロキシなら目に見えて失敗します。しかし、proxyオブジェクトなしで作成したコンテキストは、何も知らせずに直接出ていきます。設定したコンテキストごとに一度、IPを返すページを読み込んでください。
server、username、passwordを持つオブジェクトを、launchかnew_contextに渡します。HTTPプロキシでは、プロキシが求めたときに、Chromium、Firefox、WebKitのすべてがこの認証情報を送ります。
使えません。3つのエンジンのすべてで、Playwrightはブラウザがプロキシ認証付きのSOCKS5に対応していないというエラーを出して、起動時に停止します。スクリプトを実行するIPをホワイトリストに登録し、socks5のserverだけを渡してください。当社のホワイトリストはHTTPだけでなくSOCKS5にも適用されます。 SOCKS5
ブラウザコンテキストごとに専用のプロキシを指定し、そのコンテキストでページを開きます。1つのコンテキスト内のページは常にそのプロキシを共有するので、ページごとにプロキシを分けるには、ページごとに1つのコンテキストが必要です。
同じ3つのフィールドを持つ同じオブジェクトです。Pythonでは辞書として、Nodeではオブジェクトリテラルとして書きます。このページのサンプルはどちらもPlaywright 1.64で動かしました。
自社ページの地域別テスト、品質チェック、広告検証、価格調査や市場調査、SEOモニタリング、ブランド保護は、当社の適正利用ポリシーのもとで事前審査なしに行えます。公開されているというだけではデータ収集の根拠にはならず、個人データには明示された適法な根拠が必要です。また、アドレスでCAPTCHA、ボット検出、レート制限、利用停止を回避することはできず、それを試みることもポリシーで禁止しています。 適正利用ポリシー