切换语言
中文 English Русский Deutsch Español Français Italiano Українська Tiếng Việt Türkçe Bahasa Indonesia हिन्दी 日本語
菜单
价格
代理
代理类型
按地区77 个地区
解决方案
资源

如何在 Playwright 中使用代理

为 Playwright 提供一个静态 ISP 地址,可以在启动时设置,也可以只用于单个浏览器上下文。这些示例在发布前已在 Chromium、Firefox 和 WebKit 中通过本地代理实际运行。

简而言之: 把包含 server、username 和 password 的 proxy 传给 chromium.launch,或传给 browser.new_context,使其只作用于一个上下文。通过 HTTP 时,三个引擎都会用这些字段完成身份验证。通过 SOCKS5 时,没有一个引擎接受用户名和密码:Playwright 会拒绝启动。请把您的 IP 加入代理的白名单,并只提供 socks5:// 的 server。

Playwright 通过一套 API 驱动 Chromium、Firefox 和 WebKit,而代理是创建浏览器或上下文的一部分。这让在一个脚本中运行多个地址变得容易,也正是它唯一硬性限制所在之处:带密码的 SOCKS5。

Python 中的 Playwright 代理

Python 示例为整个浏览器设置代理并启动 Chromium;按上下文的示例则把代理限定在一个上下文中。切换引擎只需把 chromium 改为 firefox 或 webkit,proxy 对象保持不变。

Playwright 代理身份验证

当代理使用 HTTP 时,三个引擎都会用 proxy 对象中的用户名和密码应答代理的 407。SOCKS5 代理则得不到任何引擎的这种应答,所以 SOCKS5 示例不带凭据,而是依赖白名单。

按页面设置 Playwright 代理,以及 bypass

代理无法附加到单个页面上。单位是上下文:为每个地址创建一个上下文,并在其中打开应当共用该地址的页面。在 Playwright 中创建上下文的开销很小,所以一个从三个国家检查同一家网店的脚本会持有三个上下文,每个都基于各自的订单。

proxy 对象还接受一个 bypass 字段,即一个以逗号分隔、应当直接访问的主机列表。可以把它用于您自己的内部服务或本地测试服务器,这样只有发往外部世界的流量才会通过您付费的地址发出。

在 Playwright 中设置代理

  1. 复制主机、端口、用户名和密码

    来自控制台的“我的代理”或 API 中的订单。每个地址都有自己的四个值。

  2. 选择作用范围

    在 launch 时设置,整个浏览器都使用该代理。在 new_context 上设置,只有该上下文使用,因此一个脚本可以让多个上下文通过不同的地址运行。

  3. 传入 proxy 对象

    {"server": "http://HOST:PORT", "username": "USERNAME", "password": "PASSWORD"}。凭据放在各自的字段中,绝不要写在 server URL 里。

  4. 要用 SOCKS5?去掉凭据

    Playwright 无法登录 SOCKS5 代理,因此请把订单切换为 SOCKS5,用代码标签页中的白名单调用放行您机器的 IP,并只保留使用新端口的 socks5://HOST:PORT。设置白名单期间,代理只接受列表中的地址,该订单的用户名和密码将不再起作用;发送一个空列表即可关闭白名单,密码登录随即恢复。

  5. 确认出口地址

    在正式运行之前,在该浏览器或上下文的一个页面中打开一次“我的 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"]}'

测试过的 Playwright 代码

使用 Python 版和 Node 版 Playwright 1.64 运行。HTTP 示例会发送用户名和密码,需要一个未设置白名单的订单;SOCKS5 示例依赖白名单,并且需要先把代理切换为 SOCKS5,切换后会得到一个新端口。请把大写内容替换为您订单中的值。

完整 API 文档

每个 Playwright 浏览器接受什么

于 2026-10-22 在 macOS 上使用 Python 版 Playwright 1.64 测试:每个引擎分别对一个要求密码的本地代理和一个放行白名单客户端的本地代理启动。“启动时被拒绝”表示 Playwright 在启动时报错并停止。
HTTP 加密码SOCKS5 加密码SOCKS5,已加入白名单
Chromium可行启动时被拒绝可行
Firefox可行启动时被拒绝可行
WebKit可行启动时被拒绝可行

Playwright 代理的常见问题

把凭据写进 server 字符串

Playwright 从各自的字段中读取用户名和密码。如果改写在 server URL 里,它们根本不会被发送:在我们的测试中,第一次导航一直挂起直到超时,没有任何指向凭据的提示。

SOCKS5 密码

每个引擎都拒绝 SOCKS5 身份验证,错误在启动时、任何页面打开之前出现。换一个库也解决不了:请把运行脚本的 IP 加入白名单,并去掉凭据。

以为 new_page 会换地址

页面共用所属上下文的代理,上下文则共用浏览器的代理,除非为它单独设置。要并行使用两个地址,请创建两个上下文,各自带上自己的代理。

跳过出口检查

端口写错或代理仍设为 HTTP 会明显报错,但没有带 proxy 对象创建的上下文会悄无声息地直接发出请求。请为每个配置好的上下文加载一次 IP 回显页面。

地址如何对应 Playwright 的模型

一个上下文,一个地址
每个浏览器上下文都可以使用来自各自订单的静态 IP
HTTP 登录
username 和 password 字段,Chromium、Firefox 和 WebKit 均接受
SOCKS5 登录
仅限已加入白名单的 IPv4 地址,通过 API 或 MCP 设置
稳定性
在您付费的整个周期内,IP 在每次运行之间保持不变

Playwright 之后的下一步

关于 Playwright 代理的问题

如何在 Playwright 中设置需要身份验证的代理?

把一个包含 server、username 和 password 的对象传给 launch 或 new_context。通过 HTTP 代理时,Chromium、Firefox 和 WebKit 都会在代理要求时发送这些凭据。

可以在 Playwright 中使用带密码的 SOCKS5 代理吗?

不可以。在三个引擎中,Playwright 都会在启动时停止,并报错说浏览器不支持 SOCKS5 代理身份验证。请把运行脚本的 IP 加入白名单,然后只传入 socks5 的 server;我们的白名单对 SOCKS5 和 HTTP 同样有效。 SOCKS5

如何为每个页面使用不同的代理?

为每个浏览器上下文设置各自的代理,并在该上下文中打开页面。同一上下文中的页面总是共用它的代理,所以按页面分配代理,就意味着每个页面一个上下文。

Python 和 Node 中的设置一样吗?

是同一个对象,带同样的三个字段:Python 写成字典,Node 写成对象字面量。本页的两个示例都使用 Playwright 1.64 运行过。

可以用这个代理做数据抓取吗?

按地区测试您自己的页面、质量检查、广告验证、价格和市场调研、SEO 监测和品牌保护,按照我们的可接受使用政策都无需事先审核。数据公开可得本身并不构成收集数据的授权,个人数据需要说明合法依据,而且这个地址无法绕过验证码、机器人检测、速率限制或封禁;政策禁止尝试这样做。 可接受使用政策

上下文和静态地址一一对应:每个市场或每个任务一个上下文,每次运行脚本时,各自都从不变的 IP 到达目标。您运行多少个上下文,就在 ISP 代理页面购买多少个地址,在价格页面比较套餐,不借助浏览器获取内容则可参考 Python requests 指南。

参考来源