# Proxy cho Selenium: Chrome và Firefox với IP ISP tĩnh | ProxyJam

Cách đặt proxy trong Selenium cho Chrome và Firefox, vì sao thông tin đăng nhập trong --proxy-server không chạy, và danh sách IP cho phép thay thế chúng ra sao. Code Python đã chạy thử.

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

Chạy Chrome hoặc Firefox dưới Selenium qua một địa chỉ ISP tĩnh. Mọi mẫu code trên trang này đã được chạy thử với một proxy cục bộ trước khi đăng, và những gì không chạy đều được nói thẳng.


Với Chrome, truyền `--proxy-server=http://HOST:PORT` làm tham số; với Firefox, đặt một Proxy thủ công trên options. Firefox có thể trả lời yêu cầu nhập mật khẩu của proxy qua handler WebDriver BiDi của Selenium, `add_authentication_handler`. Chrome thì không làm được trong thử nghiệm của chúng tôi: nó bỏ qua thông tin đăng nhập trong `--proxy-server`, và cả hai handler BiDi đều hết thời gian chờ. Với Chrome, hãy đưa IP nơi các bài kiểm thử chạy vào danh sách IP cho phép của proxy, và proxy sẽ không cần thông tin đăng nhập, qua HTTP hay SOCKS5.


## Đặt proxy trong Selenium

1. **Tìm IP công khai nơi các bài kiểm thử chạy** Địa chỉ của máy hoặc CI runner như internet nhìn thấy, không phải địa chỉ cục bộ của nó. [What Is My IP](/vi/what-is-my-ip/) hiển thị địa chỉ này.
2. **Đưa IP đó vào danh sách IP cho phép của proxy** Một lời gọi API, `PUT /orders/ORDER_ID/whitelist`, hoặc công cụ `set_proxy_whitelist` của máy chủ MCP; bảng điều khiển hiện chưa có chức năng cho việc này. Danh sách nhận địa chỉ IPv4 và mỗi lần gọi sẽ thay thế toàn bộ danh sách. 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.
3. **Sao chép host và port từ đơn hàng** Từ mục Proxy của tôi hoặc từ API. Khi đã có danh sách IP cho phép, không cần tên đăng nhập và mật khẩu.
4. **Đặt proxy trên options của trình duyệt** Chrome: `--proxy-server=http://HOST:PORT`, hoặc `socks5://HOST:PORT` sau khi chuyển proxy sang SOCKS5. Firefox: một `Proxy` thủ công với `httpProxy` và `sslProxy`.
5. **Mở một trang và kiểm tra địa chỉ đi ra** Tải What Is My IP một lần trong trình duyệt được điều khiển và xác nhận nó hiển thị địa chỉ bạn đã mua, rồi chạy bộ kiểm thử.

## Code đã chạy thử cho Selenium 4 bằng Python

Mẫu Firefox dùng mật khẩu 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. Các mẫu trình duyệt còn lại giả định IP máy của bạn đã nằm trong danh sách IP cho phép của proxy; mẫu SOCKS5 còn 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, và thay ORDER_ID, YOUR_API_KEY và YOUR_IP trong lời gọi danh sách cho phép.

### Chrome

Chrome qua proxy HTTP.

```
# The proxy has your machine's IP on its whitelist, so no credentials
# are sent: Chrome ignores them in --proxy-server anyway.
from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument("--headless=new")  # remove to watch the browser
options.add_argument("--proxy-server=http://HOST:PORT")

driver = webdriver.Chrome(options=options)
try:
    driver.get("https://example.com/")
    print(driver.title)
finally:
    driver.quit()
```

### Firefox có mật khẩu

Firefox trả lời yêu cầu nhập mật khẩu của proxy.

```
# Selenium 4.51+ with WebDriver BiDi; pip install selenium
from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType

options = webdriver.FirefoxOptions()
options.enable_bidi = True
options.add_argument("-headless")  # remove to watch the browser
options.proxy = Proxy({
    "proxyType": ProxyType.MANUAL,
    "httpProxy": "HOST:PORT",
    "sslProxy": "HOST:PORT",
})

driver = webdriver.Firefox(options=options)
try:
    # Answers the proxy's 407 with your username and password
    driver.network.add_authentication_handler(
        lambda request: request.provide_credentials("USERNAME", "PASSWORD")
    )
    driver.get("https://example.com/")
    print(driver.title)
finally:
    driver.quit()
```

### Firefox

Firefox qua proxy HTTP có danh sách IP cho phép.

```
# The proxy has your machine's IP on its whitelist, so no credentials
# are sent. For a password instead, see selenium-firefox-auth.
from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType

options = webdriver.FirefoxOptions()
options.add_argument("-headless")  # remove to watch the browser
options.proxy = Proxy({
    "proxyType": ProxyType.MANUAL,
    "httpProxy": "HOST:PORT",
    "sslProxy": "HOST:PORT",
})

driver = webdriver.Firefox(options=options)
try:
    driver.get("https://example.com/")
    print(driver.title)
finally:
    driver.quit()
```

### Chrome SOCKS5

Chrome qua proxy SOCKS5.

```
# Switch the proxy to SOCKS5 first, then use the port the order shows.
# The whitelist applies to SOCKS5 as well, so no credentials here either.
from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument("--headless=new")  # remove to watch the browser
options.add_argument("--proxy-server=socks5://HOST:PORT")

driver = webdriver.Chrome(options=options)
try:
    driver.get("https://example.com/")
    print(driver.title)
finally:
    driver.quit()
```

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


## Tùy chọn proxy trong Selenium, theo từng trình duyệt

|  | Proxy HTTP | Proxy SOCKS5 | Tên đăng nhập và mật khẩu |
|---|---|---|---|
| Chrome | --proxy-server=http://HOST:PORT | --proxy-server=socks5://HOST:PORT | Bị bỏ qua trong --proxy-server; hãy dùng danh sách IP cho phép |
| Firefox | Proxy với httpProxy và sslProxy | Proxy với socksProxy và socksVersion 5 | Chạy được qua add_authentication_handler (BiDi), qua HTTP |
| Chrome, các handler BiDi | add_auth_handler và add_authentication_handler đều hết thời gian chờ | Chưa thử | Dùng danh sách IP cho phép cho đến khi một phiên bản Selenium hoặc Chrome sau này thay đổi điều đó |

Thử nghiệm ngày 2026-10-22 với Selenium 4.51, Chrome và Firefox ở chế độ headless, với một proxy cục bộ yêu cầu mật khẩu trên một port và chấp nhận client có trong danh sách cho phép trên một port khác.


## Một bài kiểm thử trình duyệt nhận được gì từ địa chỉ này

- **Không có mật khẩu trong trình duyệt:** Danh sách cho phép chấp nhận địa chỉ IPv4 của runner, nên không có bí mật nào nằm trong options hay log
- **Cả hai scheme của trình duyệt:** http:// cho các trang thông thường, socks5:// sau khi đơn hàng được chuyển
- **Cùng nguồn gốc mỗi lần chạy:** Lần chạy hôm qua và hôm nay đi ra từ cùng một IP, giữ trong suốt kỳ thanh toán
- **Driver song song:** Nhiều driver có thể dùng chung địa chỉ, hoặc mỗi driver có địa chỉ riêng

## Những gì hay sai khi dùng Selenium với proxy

### Thông tin đăng nhập nằm trong --proxy-server

Chrome bỏ tên đăng nhập và mật khẩu khỏi tham số đó mà không báo lỗi, kết nối mà không có chúng và nhận 407 từ proxy. Khi đó trang không tải được, trông giống sự cố mạng hơn là sự cố xác thực.

### Việc tải driver đi qua proxy

Khi options của Firefox có proxy, Selenium Manager tải driver qua chính proxy đó. Với proxy chỉ dùng mật khẩu, việc tải này thất bại trước khi trình duyệt khởi động; với danh sách IP cho phép thì thành công.

### Danh sách cho phép chứa sai địa chỉ

CI runner thường đi ra từ một IP công khai khác với laptop của bạn, và một số runner đổi IP giữa các lần chạy. Hãy đưa vào danh sách địa chỉ nơi các bài kiểm thử chạy, và cập nhật khi địa chỉ đó thay đổi, vì mỗi lần gọi sẽ thay thế toàn bộ danh sách.

### Dùng SOCKS5 trong trình duyệt trước khi chuyển

Một địa chỉ đang đặt HTTP không trả lời SOCKS5. Hãy chuyển proxy trên đơn hàng trước và dùng port mà đơn hàng hiển thị sau đó; chỉ đổi scheme trong tham số sẽ cho ra một trình duyệt không kết nối được.


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

### Làm sao dùng proxy có xác thực trong Selenium?

Với Firefox, hãy bật WebDriver BiDi và đăng ký một handler bằng driver.network.add_authentication_handler để cung cấp tên đăng nhập và mật khẩu; cách này chạy được với Selenium 4.51. Với Chrome, không cách nào gửi thông tin đăng nhập chạy được trong thử nghiệm của chúng tôi: nó bỏ qua chúng trong switch proxy, và cả hai handler BiDi đều hết thời gian chờ. Với Chrome, hãy đưa IP công khai nơi các bài kiểm thử chạy vào danh sách cho phép, và trình duyệt sẽ kết nối mà không cần thông tin đăng nhập nào.

### Làm sao cài proxy trong Python Selenium cho Chrome?

Tạo ChromeOptions, thêm tham số --proxy-server=http://HOST:PORT, và truyền options cho webdriver.Chrome. Với SOCKS5, hãy chuyển proxy sang SOCKS5 trên đơn hàng và dùng socks5://HOST:PORT với port mà đơn hàng hiển thị sau đó.

### Danh sách IP cho phép có dùng được với SOCKS5 không?

Có. Một địa chỉ có trong danh sách cho phép được chấp nhận mà không cần thông tin đăng nhập qua HTTP và qua SOCKS5, và đó là điều giúp dùng được SOCKS5 từ Chrome, vì Chrome không gửi được tên đăng nhập và mật khẩu SOCKS5. Danh sách cho phép được đặt qua API hoặc máy chủ MCP và nhận địa chỉ IPv4.

### Mỗi trình duyệt trong bộ kiểm thử có thể dùng một proxy khác không?

Có, mỗi driver một proxy: proxy là một phần của options mà driver dùng khi khởi động, nên hai driver có thể dùng hai địa chỉ. Không thể đổi proxy của một Chrome đang chạy; thay vào đó hãy khởi động một driver mới.

### Một bộ kiểm thử dài có bị đổi địa chỉ giữa chừng không?

Không. Driver giữ địa chỉ mà nó khởi động cùng cho đến khi thoát, và bản thân địa chỉ vẫn được gán cho bạn trong suốt kỳ thanh toán. Bộ kiểm thử cần nhiều nguồn gốc cùng lúc sẽ cần một pool đổi địa chỉ, và loại đó chưa được bán.

### Có thể dùng proxy vào việc gì?

Kiểm thử đầu cuối sản phẩm của chính bạn, kiểm tra cửa hàng của bạn theo vùng, xác minh quảng cáo, nghiên cứu giá và bảo vệ thương hiệu đề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. Điều khiển trình duyệt để vượt CAPTCHA, cơ chế chống bot, giới hạn tần suất hay lệnh cấm tài khoản là chuyện khác: địa chỉ không làm được việc đó, và chính sách cấm thử làm.


Một địa chỉ tĩnh giúp các bài kiểm thử trình duyệt lặp lại được: cùng bộ kiểm thử chạy vào tuần sau sẽ đến từ cùng một nơi, nên thay đổi trong kết quả đến từ trang web. Đặt mua một địa chỉ trên trang [proxy ISP](/vi/isp-proxies/), xem [bảng giá](/vi/pricing/), và đặt cùng địa chỉ đó cho các lời gọi HTTP thuần với hướng dẫn [Python requests](/vi/integrations/python-requests/).



## Nguồn

- [Selenium documentation, Proxy](https://www.selenium.dev/documentation/webdriver/drivers/options/#proxy): đặt proxy trên options của trình duyệt
- [Selenium documentation, Selenium Manager](https://www.selenium.dev/documentation/selenium_manager/): cách tải driver, và việc proxy đã cấu hình được dùng cho việc tải đó
- [Chromium, network settings](https://www.chromium.org/developers/design-documents/network-settings/): switch `--proxy-server` và các scheme của nó




Selenium không tự định tuyến lưu lượng: nó khởi động một trình duyệt và giao proxy cho trình duyệt như một phần của options. Đó là lý do câu trả lời khác nhau giữa Chrome và Firefox, và cũng là lý do xác thực proxy là chỗ phần lớn các cấu hình bị hỏng.

## Proxy cho Python Selenium với Chrome và Firefox

Chrome đọc proxy từ một switch dòng lệnh, Firefox đọc từ một đối tượng proxy trên options của nó. Cả hai đều chấp nhận proxy có danh sách IP cho phép mà không cần cài đặt thêm; Firefox còn có thể trả lời yêu cầu nhập mật khẩu của proxy qua WebDriver BiDi, điều mà Chrome không làm được trong thử nghiệm của chúng tôi.

