# Proxy cho Playwright: cài đặt có xác thực, Python và Node | ProxyJam

Cách đặt proxy Playwright cho từng trình duyệt hoặc từng context, với tên đăng nhập và mật khẩu qua HTTP, và vì sao SOCKS5 cần danh sách IP cho phép. Code đã chạy thử.

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

Giao cho Playwright một địa chỉ ISP tĩnh, khi launch hoặc cho một browser context duy nhất. Các mẫu code đã được chạy trong Chromium, Firefox và WebKit với một proxy cục bộ trước khi đăng.


Truyền proxy với server, username và password cho chromium.launch, hoặc cho browser.new_context để giới hạn nó trong một context. Qua HTTP, cả ba engine đều xác thực bằng các trường đó. Qua SOCKS5, không engine nào chấp nhận tên đăng nhập và mật khẩu: Playwright từ chối launch. Hãy đưa IP của bạn vào danh sách IP cho phép của proxy và chỉ truyền server socks5://.


## Đặt proxy trong Playwright

1. **Sao chép host, port, tên đăng nhập và mật khẩu** Từ mục Proxy của tôi trong bảng điều khiển hoặc từ đơn hàng trong API. Mỗi địa chỉ đi kèm bốn giá trị riêng.
2. **Chọn phạm vi** Khi đặt lúc `launch`, cả trình duyệt dùng proxy. Khi đặt trên `new_context`, chỉ context đó dùng, nên một script có thể chạy nhiều context qua các địa chỉ khác nhau.
3. **Truyền đối tượng proxy** `{"server": "http://HOST:PORT", "username": "USERNAME", "password": "PASSWORD"}`. Thông tin đăng nhập nằm trong các trường riêng của chúng, không bao giờ nằm trong URL của server.
4. **Chuyển sang SOCKS5? Bỏ thông tin đăng nhập** Playwright không đăng nhập được vào proxy SOCKS5, nên hãy chuyển đơn hàng sang SOCKS5, cho phép IP máy của bạn bằng lời gọi danh sách cho phép trong các tab code, và chỉ giữ `socks5://HOST:PORT`, với port mới. Khi danh sách đang được đặt, proxy chỉ chấp nhận các địa chỉ có trong danh sách, còn tên đăng nhập và mật khẩu ngừng hoạt động với đơn hàng đó; gửi một danh sách rỗng sẽ tắt danh sách cho phép, và đăng nhập bằng mật khẩu hoạt động trở lại.
5. **Xác nhận địa chỉ đi ra** Mở [What Is My IP](/vi/what-is-my-ip/) một lần trong một trang của trình duyệt hoặc context đó, trước lần chạy thật.

## Code đã chạy thử cho Playwright

Chạy với Playwright 1.64 cho Python và cho Node. Các mẫu HTTP gửi tên đăng nhập và mật khẩu nên cần một đơn hàng chưa đặt danh sách IP cho phép; mẫu SOCKS5 dựa vào danh sách cho phép và cần chuyển proxy sang SOCKS5 trước, việc này cho ra một port mới. Thay các giá trị viết hoa bằng giá trị của đơn hàng của bạn.

### Python

Proxy cho cả trình duyệt, 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

Proxy cho cả trình duyệt, 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();
})();
```

### Từng context

Proxy cho một browser context.

```
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

SOCKS5 với IP có trong danh sách cho phép.

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

### Gọi API danh sách cho phép

Thêm IP của bạn vào danh sách IP cho phép của proxy.

```
# 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"]}'
```


## Mỗi trình duyệt của Playwright chấp nhận gì

|  | HTTP có mật khẩu | SOCKS5 có mật khẩu | SOCKS5, có trong danh sách cho phép |
|---|---|---|---|
| Chromium | Chạy được | Bị từ chối khi launch | Chạy được |
| Firefox | Chạy được | Bị từ chối khi launch | Chạy được |
| WebKit | Chạy được | Bị từ chối khi launch | Chạy được |

Thử nghiệm ngày 2026-10-22 với Playwright 1.64 cho Python trên macOS: mỗi engine được launch với một proxy đòi mật khẩu, và với một proxy chấp nhận client có trong danh sách cho phép. Bị từ chối nghĩa là Playwright dừng lại khi launch kèm một lỗi.


## Địa chỉ khớp với mô hình của Playwright ra sao

- **Một context, một địa chỉ:** Mỗi browser context có thể mang IP tĩnh riêng từ đơn hàng riêng
- **Đăng nhập qua HTTP:** Các trường username và password, được Chromium, Firefox và WebKit chấp nhận
- **Đăng nhập qua SOCKS5:** Chỉ bằng địa chỉ IPv4 có trong danh sách cho phép, đặt qua API hoặc MCP
- **Độ ổn định:** IP giữ nguyên qua các lần chạy trong suốt kỳ bạn đã trả tiền

## Những gì hay sai với proxy trong Playwright

### Thông tin đăng nhập trong chuỗi server

Playwright đọc tên đăng nhập và mật khẩu từ các trường riêng của chúng. Nếu viết vào URL của server, chúng hoàn toàn không được gửi: trong thử nghiệm của chúng tôi, lần điều hướng đầu tiên bị treo cho đến khi hết thời gian chờ, không có thông báo nào chỉ ra thông tin đăng nhập.

### Mật khẩu SOCKS5

Mọi engine đều từ chối xác thực SOCKS5, và lỗi xuất hiện khi launch, trước khi bất kỳ trang nào mở. Cách sửa không phải là đổi thư viện: hãy đưa IP nơi script của bạn chạy vào danh sách cho phép và bỏ thông tin đăng nhập.

### Tưởng rằng new_page sẽ đổi địa chỉ

Các trang dùng chung proxy của context chứa chúng, và các context dùng chung proxy của trình duyệt trừ khi được giao proxy riêng. Để chạy hai địa chỉ song song, hãy tạo hai context, mỗi context có proxy của nó.

### Bỏ qua bước kiểm tra địa chỉ đi ra

Gõ sai port hoặc proxy vẫn đang đặt HTTP sẽ báo lỗi rõ ràng, nhưng một context được tạo mà không có đối tượng proxy sẽ đi thẳng ra ngoài mà không báo gì. Hãy tải một trang trả lại IP một lần cho mỗi context bạn cấu hình.


## Câu hỏi về proxy trong Playwright

### Làm sao đặt proxy có xác thực trong Playwright?

Truyền một đối tượng có server, username và password, cho launch hoặc cho new_context. Qua proxy HTTP, Chromium, Firefox và WebKit đều gửi các thông tin đăng nhập đó khi proxy yêu cầu.

### Có thể dùng proxy SOCKS5 có mật khẩu trong Playwright không?

Không. Playwright dừng lại khi launch với lỗi nói rằng trình duyệt không hỗ trợ xác thực proxy SOCKS5, ở cả ba engine. Hãy đưa IP nơi script của bạn chạy vào danh sách cho phép, rồi chỉ truyền server socks5; danh sách cho phép của chúng tôi áp dụng cho SOCKS5 cũng như HTTP.

### Làm sao dùng proxy khác nhau cho mỗi trang?

Giao cho mỗi browser context một proxy riêng và mở trang trong context đó. Các trang trong cùng một context luôn dùng chung proxy của nó, nên muốn mỗi trang một proxy thì cần mỗi trang một context.

### Cài đặt trong Python và Node có giống nhau không?

Cùng một đối tượng với cùng ba trường: Python viết nó dưới dạng dictionary, Node dưới dạng object literal. Cả hai mẫu trên trang này đều được chạy với Playwright 1.64.

### Có thể dùng proxy để scraping không?

Kiểm thử các trang của chính bạn theo vùng, kiểm tra chất lượng, xác minh quảng cáo, nghiên cứu giá và thị trường, giám sát SEO và bảo vệ thương hiệu chạy được mà không cần xét duyệt trước theo chính sách sử dụng chấp nhận được của chúng tôi. Việc dữ liệu được công khai tự nó không cho phép thu thập dữ liệu đó, dữ liệu cá nhân cần một cơ sở pháp lý được nêu rõ, và địa chỉ không vượt qua CAPTCHA, cơ chế phát hiện bot, giới hạn tần suất hay lệnh cấm; chính sách cấm thử làm điều đó.


Context và địa chỉ tĩnh ứng với nhau một đối một: mỗi thị trường hoặc mỗi tác vụ một context, mỗi context đến trang đích từ một IP không đổi mỗi lần script chạy. Mua số địa chỉ bằng số context bạn chạy trên trang [proxy ISP](/vi/isp-proxies/), so sánh các gói trên [bảng giá](/vi/pricing/), và tải trang không cần trình duyệt qua hướng dẫn [Python requests](/vi/integrations/python-requests/).



## Nguồn

- [Playwright documentation, Network: HTTP proxy](https://playwright.dev/python/docs/network#http-proxy): tùy chọn proxy khi launch và cho từng context
- [Playwright API, BrowserType.launch](https://playwright.dev/python/docs/api/class-browsertype#browser-type-launch): các trường server, bypass, username và password
- [RFC 1929, Username/Password Authentication for SOCKS V5](https://www.rfc-editor.org/rfc/rfc1929): cách đăng nhập SOCKS5 mà các trình duyệt không triển khai




Playwright điều khiển Chromium, Firefox và WebKit qua một API duy nhất, và proxy là một phần của cách tạo trình duyệt hoặc context. Điều đó giúp dễ chạy nhiều địa chỉ trong một script, và đó cũng là nơi có giới hạn cứng duy nhất của nó: SOCKS5 có mật khẩu.

## Proxy cho Playwright bằng Python

Mẫu Python launch Chromium với proxy cho cả trình duyệt; mẫu theo context thì giới hạn proxy trong một context. Đổi engine chỉ là đổi chromium thành firefox hoặc webkit; đối tượng proxy giữ nguyên.

## Xác thực proxy trong Playwright

Cả ba engine trả lời mã 407 của proxy bằng tên đăng nhập và mật khẩu từ đối tượng proxy khi proxy dùng HTTP. Proxy SOCKS5 không nhận được câu trả lời như vậy từ engine nào, đó là lý do mẫu SOCKS5 không mang thông tin đăng nhập và dựa vào danh sách IP cho phép.

## Proxy cho từng trang trong Playwright, và bypass

Không thể gắn proxy cho một trang riêng lẻ. Đơn vị là context: tạo một context cho mỗi địa chỉ và mở các trang cần dùng chung địa chỉ đó bên trong nó. Context trong Playwright tốn ít tài nguyên, nên một script kiểm tra một cửa hàng từ ba quốc gia sẽ giữ ba context, mỗi context dựng từ đơn hàng riêng.

Đối tượng proxy còn nhận trường bypass, một danh sách host phân tách bằng dấu phẩy cần được truy cập trực tiếp. Hãy dùng nó cho các dịch vụ nội bộ của bạn hoặc một máy chủ kiểm thử cục bộ, để chỉ lưu lượng hướng ra thế giới bên ngoài mới đi qua địa chỉ bạn trả tiền.

