# Playwright 代理接入示例

在浏览器启动时配置账密代理，隔离上下文并验证出口地区。

Playwright 原生支持在浏览器启动时提供代理服务器、用户名和密码。不同代理身份应使用不同浏览器实例。

## Playwright

```javascript
import { chromium } from 'playwright';

const browser = await chromium.launch({
  proxy: {
    server: 'http://<gateway-host>:<gateway-port>',
    username: process.env.PROXY_USERNAME,
    password: process.env.PROXY_PASSWORD,
  },
});

const context = await browser.newContext();
const page = await context.newPage();
await page.goto('https://<public-test-host>/ip');
console.log(await page.textContent('body'));
await browser.close();
```

## 配置

- 服务器值使用控制台提供的主机和端口。
- 用户名必须是完整的服务端生成值。
- 密码从环境变量读取。

## 隔离

- 不同任务创建独立 BrowserContext。
- 不同代理身份不共享同一个浏览器进程。
- Cookie、缓存和下载目录按任务清理。

## 验证

- 先打开公开检测页确认出口和地区。
- 再访问允许自动化的业务页面。

## 安全与合规

- 不要在 trace、截图文件名或日志中写入凭据。
- 遵守目标网站自动化和访问规则。

html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}
