把凭据写进 server 字符串
Playwright 从各自的字段中读取用户名和密码。如果改写在 server URL 里,它们根本不会被发送:在我们的测试中,第一次导航一直挂起直到超时,没有任何指向凭据的提示。
简而言之: 把包含 server、username 和 password 的 proxy 传给 chromium.launch,或传给 browser.new_context,使其只作用于一个上下文。通过 HTTP 时,三个引擎都会用这些字段完成身份验证。通过 SOCKS5 时,没有一个引擎接受用户名和密码:Playwright 会拒绝启动。请把您的 IP 加入代理的白名单,并只提供 socks5:// 的 server。
Playwright 通过一套 API 驱动 Chromium、Firefox 和 WebKit,而代理是创建浏览器或上下文的一部分。这让在一个脚本中运行多个地址变得容易,也正是它唯一硬性限制所在之处:带密码的 SOCKS5。
Python 示例为整个浏览器设置代理并启动 Chromium;按上下文的示例则把代理限定在一个上下文中。切换引擎只需把 chromium 改为 firefox 或 webkit,proxy 对象保持不变。
当代理使用 HTTP 时,三个引擎都会用 proxy 对象中的用户名和密码应答代理的 407。SOCKS5 代理则得不到任何引擎的这种应答,所以 SOCKS5 示例不带凭据,而是依赖白名单。
代理无法附加到单个页面上。单位是上下文:为每个地址创建一个上下文,并在其中打开应当共用该地址的页面。在 Playwright 中创建上下文的开销很小,所以一个从三个国家检查同一家网店的脚本会持有三个上下文,每个都基于各自的订单。
proxy 对象还接受一个 bypass 字段,即一个以逗号分隔、应当直接访问的主机列表。可以把它用于您自己的内部服务或本地测试服务器,这样只有发往外部世界的流量才会通过您付费的地址发出。
来自控制台的“我的代理”或 API 中的订单。每个地址都有自己的四个值。
在 launch 时设置,整个浏览器都使用该代理。在 new_context 上设置,只有该上下文使用,因此一个脚本可以让多个上下文通过不同的地址运行。
{"server": "http://HOST:PORT", "username": "USERNAME", "password": "PASSWORD"}。凭据放在各自的字段中,绝不要写在 server URL 里。
Playwright 无法登录 SOCKS5 代理,因此请把订单切换为 SOCKS5,用代码标签页中的白名单调用放行您机器的 IP,并只保留使用新端口的 socks5://HOST:PORT。设置白名单期间,代理只接受列表中的地址,该订单的用户名和密码将不再起作用;发送一个空列表即可关闭白名单,密码登录随即恢复。
在正式运行之前,在该浏览器或上下文的一个页面中打开一次“我的 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 加入白名单,并去掉凭据。
页面共用所属上下文的代理,上下文则共用浏览器的代理,除非为它单独设置。要并行使用两个地址,请创建两个上下文,各自带上自己的代理。
端口写错或代理仍设为 HTTP 会明显报错,但没有带 proxy 对象创建的上下文会悄无声息地直接发出请求。请为每个配置好的上下文加载一次 IP 回显页面。
把一个包含 server、username 和 password 的对象传给 launch 或 new_context。通过 HTTP 代理时,Chromium、Firefox 和 WebKit 都会在代理要求时发送这些凭据。
不可以。在三个引擎中,Playwright 都会在启动时停止,并报错说浏览器不支持 SOCKS5 代理身份验证。请把运行脚本的 IP 加入白名单,然后只传入 socks5 的 server;我们的白名单对 SOCKS5 和 HTTP 同样有效。 SOCKS5
为每个浏览器上下文设置各自的代理,并在该上下文中打开页面。同一上下文中的页面总是共用它的代理,所以按页面分配代理,就意味着每个页面一个上下文。
是同一个对象,带同样的三个字段:Python 写成字典,Node 写成对象字面量。本页的两个示例都使用 Playwright 1.64 运行过。
按地区测试您自己的页面、质量检查、广告验证、价格和市场调研、SEO 监测和品牌保护,按照我们的可接受使用政策都无需事先审核。数据公开可得本身并不构成收集数据的授权,个人数据需要说明合法依据,而且这个地址无法绕过验证码、机器人检测、速率限制或封禁;政策禁止尝试这样做。 可接受使用政策