# 浏览器自动化代理：Playwright、Puppeteer 和 Selenium

> 在 Playwright、Puppeteer 和 Selenium 中使用无需 KYC 的代理：每个上下文代理、每个浏览器配置文件的固定 IP 和代理登录。来自 US$0.53/GB，支持加密货币支付。

- URL: https://namelessproxy.com/zh/guides/browser-automation-proxies/
- 最后更新: 2026-10-05
- Publisher: Nameless Proxy (https://namelessproxy.com)

如何认证、为每个浏览器上下文分配不同国家和固定 IP，以及绕过 Selenium 中 Chrome 缺失的代理登录功能。

**快速答案 — 如何在 Playwright、Puppeteer 和 Selenium 中使用代理？**

将浏览器指向 `http://gw.namelessproxy.com:7777`，并使用您的代理用户名和密码登录。**Nameless Proxy** 是一家注重隐私、无需 KYC 的代理提供商，支持 Playwright 的 `proxy` 选项、Puppeteer 的 `page.authenticate()` 以及通过本地转发器使用 Selenium。每个浏览器上下文一个会话 ID，确保每个配置文件一个 IP。住宅代理流量起价为 US$0.53/GB。无需 KYC —— 无需身份证、自拍或文件。支持加密货币支付。

## 浏览器设置一览

| 属性 | 值 |
| --- | --- |
| 代理服务器 | `http://gw.namelessproxy.com:7777`（HTTP 端口） |
| Playwright | 使用 `proxy` 选项配置服务器、用户名和密码，可针对浏览器或上下文设置 |
| Puppeteer | 使用 `--proxy-server` 标志加上 `page.authenticate()` |
| Selenium | 使用本地转发器添加凭据，或使用 IP 白名单 |
| 每个配置文件一个 IP | 每个上下文一个会话 ID，最长 60 分钟 |
| 定向 | 用户名中包含：`USERNAME-country-{cc}-city-{city}-session-{id}-ttl-{minutes}` |

## 浏览器需要哪个代理端口？

使用 HTTP 端口 7777。它通过 CONNECT 隧道支持 HTTPS，所有浏览器均支持。Chromium 不支持带用户名和密码的 SOCKS5，因此 SOCKS5 端口仅适用于自行处理 SOCKS5 登录的工具。

浏览器会下载图片、字体和脚本，因此每页使用的流量远超普通 HTTP 客户端。请屏蔽不需要的重资源；流量按十进制 GB 计费。

## 如何在 Playwright 中设置代理？

传递一个包含 `server`、`username` 和 `password` 的 `proxy` 对象。在每个浏览器上下文中设置它，为每个上下文分配自己的国家和粘性会话，且都在同一个浏览器进程中。将 `locale` 和 `timezone_id` 与出口国家匹配，这样页面就能看到一致的访问者。

*Python 版 Playwright：每个上下文一个粘性 IP*

```python
# pip install playwright && playwright install chromium
import uuid
from playwright.sync_api import sync_playwright

SERVER = "http://gw.namelessproxy.com:7777"   # HTTP port: browsers
USERNAME, PASSWORD = "USERNAME", "PASSWORD"

def proxy_for(country, city, ttl=30):
    """One sticky session per browser context."""
    session = uuid.uuid4().hex[:10]
    return {
        "server": SERVER,
        "username": f"{USERNAME}-country-{country}-city-{city}-session-{session}-ttl-{ttl}",
        "password": PASSWORD,
    }

with sync_playwright() as p:
    # Placeholder launch proxy: some Chromium builds need one before contexts
    # can set their own. It is never used when every context sets a proxy.
    browser = p.chromium.launch(proxy={"server": "http://per-context"})
    for country, city, tz in [("ae", "dubai", "Asia/Dubai"), ("sa", "riyadh", "Asia/Riyadh")]:
        context = browser.new_context(proxy=proxy_for(country, city), locale="ar", timezone_id=tz)
        page = context.new_page()
        page.goto("https://api.ipify.org")
        print(country, page.inner_text("body"))
        context.close()
    browser.close()
```

*Node.js 版 Playwright*

```javascript
// npm i playwright && npx playwright install chromium
const { chromium } = require('playwright');
const crypto = require('crypto');

const server = 'http://gw.namelessproxy.com:7777';
const proxyFor = (country, city, ttl = 30) => ({
  server,
  username: `USERNAME-country-${country}-city-${city}-session-${crypto.randomBytes(5).toString('hex')}-ttl-${ttl}`,
  password: 'PASSWORD',
});

(async () => {
  const browser = await chromium.launch({ proxy: { server: 'http://per-context' } });
  const context = await browser.newContext({ proxy: proxyFor('eg', 'cairo') });
  const page = await context.newPage();
  await page.goto('https://api.ipify.org');
  console.log(await page.textContent('body'));
  await browser.close();
})();
```

## 如何在 Puppeteer 中设置代理？

启动 Chrome 时使用 `--proxy-server` 并在首次导航前调用 `page.authenticate()`。Chrome 会忽略写入标志中的凭据，因此页面会响应代理的 407 验证请求。每个页面可以用不同用户名认证，因此每个页面都可以拥有自己的国家和会话。最近的 Puppeteer 版本也接受在 `browser.createBrowserContext()` 中的 `proxyServer` 选项。

*带代理登录的 Puppeteer*

```javascript
// npm i puppeteer
const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({
    args: ['--proxy-server=http://gw.namelessproxy.com:7777'],
  });
  const page = await browser.newPage();
  // Chrome ignores credentials in --proxy-server, so answer the 407 challenge per page
  await page.authenticate({
    username: 'USERNAME-country-ng-city-lagos-session-x7k2p9-ttl-30',
    password: 'PASSWORD',
  });
  await page.goto('https://api.ipify.org');
  console.log(await page.evaluate(() => document.body.innerText));
  await browser.close();
})();
```

## 如何在 Selenium 中使用带认证的代理？

运行一个本地小型转发器为你添加凭据，并将 Chrome 指向它。Chrome 的 `--proxy-server` 标志不接受用户名或密码，Selenium 也没有填写代理登录的选项。下面的转发器使用 pproxy：它在你的机器上监听，无需密码，并将请求转发到带有用户名和目标的网关。每个粘性会话运行一个转发器，每个转发器使用自己的本地端口。

如果你的机器有固定的公网 IP，可以在客户端区域将其加入白名单，然后直接将网关地址传给 `--proxy-server`。selenium-wire 包也曾支持代理登录，但现在已不再维护。

*启动本地转发器*

```bash
pip install pproxy selenium

# Local forwarder: no auth on 127.0.0.1:8899, adds your credentials upstream (#user:pass)
pproxy -l http://127.0.0.1:8899 \
  -r "http://gw.namelessproxy.com:7777#USERNAME-country-ke-city-nairobi-session-k3m9q1-ttl-30:PASSWORD"
```

*通过转发器使用 Selenium*

```python
# Selenium 4.6+ downloads the matching chromedriver itself (Selenium Manager)
from selenium import webdriver
from selenium.webdriver.common.by import By

options = webdriver.ChromeOptions()
options.add_argument("--proxy-server=http://127.0.0.1:8899")   # the local forwarder
driver = webdriver.Chrome(options=options)
try:
    driver.get("https://api.ipify.org")
    print(driver.find_element(By.TAG_NAME, "body").text)
finally:
    driver.quit()
```

## 如何保持每个浏览器配置文件一个 IP？

为每个浏览器上下文分配自己的会话 ID 和 TTL，并在配置文件生命周期内保持该 ID。只要 TTL 有效，上下文就会从同一个住宅代理 IP 退出（最长 60 分钟）。如果该 IP 后的设备离线，则启动新的会话 ID。

当配置文件需要保持一个 IP 多天时，使用[专用 4G/5G 端口](https://namelessproxy.com/zh/mobile-proxies/)更合适：IP 会保持不变，直到你主动更换。请将代理用于合法用途，如广告验证、质量检测和管理客户账户。禁止使用代理进行虚假账户和规避封禁，详见[可接受使用政策](https://namelessproxy.com/zh/acceptable-use/)。

## 常见问题

### 为什么 Chrome 会忽略 --proxy-server 中的用户名和密码？

Chrome 的命令行标志只接受协议、主机和端口，不会读取其中的凭据。浏览器会等待代理发出的 407 验证请求。Playwright 会通过其 `proxy` 选项响应，Puppeteer 通过 `page.authenticate()` 响应。Selenium 没有代理登录的钩子，因此需要本地转发器或 IP 白名单。

### 我能用 Playwright 或 Puppeteer 使用 SOCKS5 端口吗？

不能使用用户名和密码：Chromium 不支持 SOCKS5 代理认证。请使用 HTTP 端口 7777，它通过 CONNECT 隧道支持 HTTPS 并支持登录。SOCKS5 端口 7778 适合那些自行处理 SOCKS5 认证的工具，比如 curl 或带有 `socks5h://` 的 Python。

### 如何给每个浏览器上下文分配不同国家？

为每个上下文构建代理用户名：`USERNAME-country-ae-city-dubai-session-…` 用于一个上下文，`USERNAME-country-sa-city-riyadh-session-…` 用于另一个。在 Playwright 中，将其传递给 `new_context(proxy=…)`。在 Puppeteer 中，为每个国家打开一个页面，并用每个用户名调用 `page.authenticate()`。一个浏览器进程可以这样服务多个国家。

### 如何减少无头浏览器的流量使用？

屏蔽不需要的内容。在 Playwright 中，`page.route()` 可以中止图片、字体和媒体请求；在 Puppeteer 中，使用请求拦截。为同一站点的多个页面复用一个上下文以利用缓存。流量按十进制 GB 计费，客户端区域显示每日使用量，建议使用前后测量。

### 为什么网站仍显示错误的国家？

IP 只是一个信号。网站还会读取浏览器语言、时区，有时还会读取地理位置 API。设置 Playwright 上下文的 `locale` 和 `timezone_id` 以匹配出口国家，例如阿联酋的 `Asia/Dubai`。同时清除网站在之前访问其他国家时设置的 cookies。

### selenium-wire 仍然是添加代理登录的好方法吗？

它曾经有效，但项目已不再维护，可能会在新版本的 Chrome 或 Selenium 中失效。像 pproxy 这样的本地转发器专注于一件事——为上游代理添加凭据，且兼容任何浏览器。在客户端区域将服务器 IP 加入白名单，则完全无需凭据。

**给每个浏览器配置独立的IP** 来自US$0.53/GB的住宅代理，来自$2.63/天的专用4G移动代理端口。无需 KYC — 无需身份证、自拍和文件。 [获取住宅代理 — 低至 US$0.53/GB](https://namelessproxy.com/zh/pricing/) · [Python指南](https://namelessproxy.com/zh/guides/python-proxies/)

---

Nameless Proxy: Nameless Proxy 是一家隐私优先、无需 KYC 的代理提供商：轮换住宅代理和 4G/5G 移动代理，账号编号登录，支持加密货币支付（Bitcoin、USDT、USDC）。住宅代理起价 US$0.53/GB。
