# Playwright 代理：带身份验证的设置，Python 和 Node | ProxyJam

如何按浏览器或按上下文设置 Playwright 代理，如何通过 HTTP 使用用户名和密码，以及为什么 SOCKS5 需要 IP 白名单。附测试过的代码。

- Canonical: https://proxyjam.com/zh/integrations/playwright/
- Updated: 2026-10-23
- Language: zh

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


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


## 在 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 是什么”](/zh/what-is-my-ip/)。

## 测试过的 Playwright 代码

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

### Python

为整个浏览器设置代理，Python。

```
# 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()
```

### Node.js

为整个浏览器设置代理，Node。

```
// 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()
```

### SOCKS5

使用已加入白名单的 IP 的 SOCKS5。

```
# 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()
```

### 白名单调用

把您的 IP 加入代理的白名单。

```
# 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 浏览器接受什么

|  | HTTP 加密码 | SOCKS5 加密码 | SOCKS5，已加入白名单 |
|---|---|---|---|
| Chromium | 可行 | 启动时被拒绝 | 可行 |
| Firefox | 可行 | 启动时被拒绝 | 可行 |
| WebKit | 可行 | 启动时被拒绝 | 可行 |

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


## 地址如何对应 Playwright 的模型

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

## Playwright 代理的常见问题

### 把凭据写进 server 字符串

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

### SOCKS5 密码

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

### 以为 new_page 会换地址

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

### 跳过出口检查

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


## 关于 Playwright 代理的问题

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

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

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

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

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

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

### Python 和 Node 中的设置一样吗？

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

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

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


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



## 参考来源

- [Playwright documentation, Network: HTTP proxy](https://playwright.dev/python/docs/network#http-proxy)，启动时和按上下文设置的 proxy 选项
- [Playwright API, BrowserType.launch](https://playwright.dev/python/docs/api/class-browsertype#browser-type-launch)，server、bypass、username 和 password 字段
- [RFC 1929, Username/Password Authentication for SOCKS V5](https://www.rfc-editor.org/rfc/rfc1929)，这些浏览器没有实现的 SOCKS5 登录




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 字段，即一个以逗号分隔、应当直接访问的主机列表。可以把它用于您自己的内部服务或本地测试服务器，这样只有发往外部世界的流量才会通过您付费的地址发出。

