Cập nhật lần cuối: 31 tháng 10, 2026.
Cách dùng proxy với Selenium trong Python
Selenium có thể mở website qua proxy HTTP, nhưng đặt địa chỉ proxy chỉ là một phần của thiết lập. Bạn còn cần phương thức xác thực mà trình duyệt hỗ trợ và cách xác minh rằng lưu lượng trình duyệt đang đi đúng tuyến mạng mong đợi.
Hướng dẫn này cho thấy cách cấu hình proxy HTTP/HTTPS trong Selenium 4 với Python, dùng IP allowlisting để xác thực proxy, xác minh IP thoát của trình duyệt và xử lý các vấn đề Chrome cùng ChromeDriver thường gặp. Ví dụ hoàn chỉnh dùng ChromeDriver cài cục bộ và endpoint proxy đã whitelist IP.
Lấy ví dụ Python hoàn chỉnh, đã kiểm thử: kindproxy-selenium-proxy-python trên GitHub .
Với ví dụ tự động hóa trình duyệt liên quan, xem Cách dùng proxy dân cư với Playwright . Hướng dẫn này tập trung vào Selenium WebDriver.
Proxy trong Selenium thay đổi điều gì
Khi Selenium khởi động trình duyệt với proxy đã cấu hình, trình duyệt gửi yêu cầu web qua proxy đó. Proxy có thể cung cấp điểm thoát mạng khác, ví dụ ở một quốc gia đã chọn. Nó không đổi ngôn ngữ trình duyệt, không đăng nhập website và không đảm bảo site đích sẽ trả về trang bình thường.
Hãy tách các kiểm tra sau:
| Kiểm tra | Nó cho bạn biết gì |
|---|---|
| WebDriver khởi động | Selenium có thể khởi chạy hoặc kết nối tới trình duyệt. |
| Kiểm tra IP trả về kết quả | Trình duyệt tới được đích kiểm tra IP qua tuyến hiện tại. |
| IP hoặc quốc gia thoát khớp | Tuyến quan sát được có vẻ dùng vị trí mạng mong đợi. |
| Trang đích hành xử như kỳ vọng | Site trả về trang hoặc nội dung theo khu vực mà bài kiểm thử cần. |
1. Cài Selenium và chuẩn bị Chrome
Tạo môi trường ảo Python:
python3 -m venv .venv
Kích hoạt và cài Selenium:
# macOS / Linux
source .venv/bin/activate
# Windows PowerShell
# .venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install "selenium>=4.20,<5"
Bạn cũng cần Google Chrome và ChromeDriver tương thích trên máy chạy trình duyệt.
Kiểm tra phiên bản:
google-chrome --version
chromedriver --version
Giữ Chrome và ChromeDriver tương thích. Nếu dùng trình duyệt hoặc đường dẫn cài đặt khác, hãy điều chỉnh path trong cấu hình.
Vì sao hướng dẫn này dùng ChromeDriver cục bộ
Các phiên bản Selenium gần đây có thể dùng Selenium Manager để tìm hoặc tải driver trình duyệt tự động. Cách đó tiện trong nhiều môi trường. Tuy nhiên, Selenium Manager có thể cần truy cập dịch vụ tải bên ngoài trước khi Chrome khởi động.
Trong môi trường thử Ubuntu của chúng tôi, Selenium Manager cố tới endpoint metadata Chrome for Testing qua proxy đã cấu hình và nhận lỗi tunnel Proxy Authentication Required. Cài Chrome và ChromeDriver cục bộ, rồi truyền đường dẫn ChromeDriver tường minh cho Selenium, giúp tránh bước tải driver đó.
Đây không phải yêu cầu cho mọi thiết lập Selenium. Đây là cách thực tế khi Selenium Manager không tới được dịch vụ tải.
2. Lấy endpoint proxy và chọn phương thức xác thực
Từ bảng điều khiển proxy, sao chép host và cổng gateway HTTP/HTTPS, rồi chọn quốc gia và cài đặt session mong muốn. Gateway có thể trông như sau:
gw.kindproxy.com:12200
Dùng đúng host và cổng được gán cho tài khoản của bạn. Ví dụ trong bài này dùng IP allowlisting, nên không đặt username hay password trong URL proxy.
Thêm IP công khai của máy chủ vào whitelist KindProxy
Với IP allowlisting, nhà cung cấp proxy ủy quyền kết nối từ địa chỉ IP công khai mà bạn thêm vào tài khoản. Sau đó trình duyệt có thể kết nối gateway proxy mà không gửi username và password trong cấu hình Selenium.
Làm theo các bước sau:
- Tìm IP egress công khai của máy sẽ chạy Chrome. Bạn có thể dùng yêu cầu kiểm tra IP trực tiếp từ máy đó, trước khi khởi chạy trình duyệt.
- Đăng nhập bảng điều khiển KindProxy và mở IP Whitelist .
- Thêm địa chỉ IP công khai của máy vào whitelist.
- Lưu mục đó.
- Mở bảng điều khiển KindProxy Proxy Traffic để tạo tham số proxy. Chọn Whitelist làm phương thức xác thực, rồi chọn quốc gia/khu vực, giao thức, loại host, cổng và loại session cần cho bài kiểm thử.
- Sao chép host và cổng gateway đã tạo vào biến môi trường
PROXY_SERVER.
Ảnh chụp bảng điều khiển bên dưới cho thấy nơi chọn Whitelist và nơi hiển thị tham số kết nối proxy. Giá trị có sẵn có thể khác tùy sản phẩm, khu vực và cài đặt bạn chọn.

Mở bảng điều khiển KindProxy Proxy Traffic để tạo hoặc xem lại tham số proxy.
Quan trọng: Thêm IP công khai của máy chạy Chrome, không phải IP thoát proxy mà trình duyệt trả về. Nếu dùng Selenium Grid hoặc Remote WebDriver, địa chỉ liên quan thường là IP egress công khai của node trình duyệt, không phải máy chạy client Python. Nếu IP công khai đó đổi, hãy cập nhật whitelist.
Trang whitelist thuộc bảng điều khiển KindProxy và yêu cầu bạn đăng nhập để quản lý các địa chỉ IP được ủy quyền.
Còn xác thực username/password thì sao?
Đối tượng Proxy của Selenium Python cung cấp các trường địa chỉ proxy như http_proxy và ssl_proxy. Mô hình được tài liệu hóa cũng gồm thuộc tính username và password SOCKS, nhưng không cung cấp thuộc tính username và password proxy HTTP tổng quát tương đương. Xem Selenium Proxy API
chính thức.
Chỉ có capability địa chỉ proxy không chứng minh proxy HTTP đã xác thực sẽ hoạt động. Chrome và Firefox có thể xử lý xác thực proxy khác nhau. Extension theo trình duyệt hoặc cầu xác thực phải được kiểm thử với đúng trình duyệt, driver và endpoint proxy trước khi coi là giải pháp hoạt động. Đừng giả định rằng đặt username:password@host trong URL proxy sẽ chạy trên mọi trình duyệt.
Ví dụ hoàn chỉnh trong hướng dẫn này dùng IP allowlisting. Nếu nhà cung cấp proxy yêu cầu xác thực username/password và không có IP allowlisting, bạn có thể cần thêm lớp xác thực. Các hướng tiếp cận phổ biến gồm extension trình duyệt xử lý thông tin đăng nhập proxy, hoặc middleware proxy cục bộ chuyển tiếp lưu lượng trình duyệt tới proxy upstream đã xác thực.
Các hướng này phụ thuộc trình duyệt và cấu hình, nên hãy kiểm thử đúng trình duyệt, driver và endpoint proxy trước khi dựa vào chúng. Bảo vệ thông tin đăng nhập proxy cẩn thận; tránh hardcode trong script hoặc để lộ trong log.
Bạn có thể gặp selenium-wire trong các hướng dẫn cũ. Dự án gốc đã được archive vào tháng 1 năm 2024 và người duy trì nêu rõ không còn được bảo trì. Vì vậy hướng dẫn này không khuyến nghị nó như dependency mới. Xem thông báo dự án selenium-wire
.
3. Cấu hình proxy HTTP/HTTPS trong Selenium 4
Đối tượng Proxy của Selenium có thể chỉ định endpoint proxy HTTP và SSL. Trong Selenium 4, gán cấu hình proxy vào tùy chọn trình duyệt bằng options.proxy trước khi tạo phiên WebDriver. Việc này truyền capability proxy như một phần cấu hình phiên trình duyệt mới.
Đây là cấu hình lõi:
import os
from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType
from selenium.webdriver.chrome.service import Service
proxy_server = os.environ["PROXY_SERVER"]
chromedriver_path = os.environ.get(
"CHROMEDRIVER_PATH",
"/usr/local/bin/chromedriver",
)
chrome_binary = os.environ.get(
"CHROME_BINARY",
"/usr/bin/google-chrome",
)
proxy = Proxy()
proxy.proxy_type = ProxyType.MANUAL
proxy.http_proxy = proxy_server
proxy.ssl_proxy = proxy_server
options = webdriver.ChromeOptions()
options.binary_location = chrome_binary
options.proxy = proxy
options.add_argument("--headless")
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
service = Service(executable_path=chromedriver_path)
driver = webdriver.Chrome(
service=service,
options=options,
)
Gateway proxy và website đích là hai giá trị khác nhau:
PROXY_SERVERlà host và cổng proxy, ví dụgw.kindproxy.com:12200.TARGET_URLlà website bạn muốn Chrome mở, ví dụhttps://example.com/.
Script đầy đủ còn kiểm tra IP trực tiếp, kiểm tra IP thoát mà trình duyệt quan sát, xác thực trang đích, xử lý lỗi thường gặp và đóng Chrome trong khối finally.
Lấy script Python hoàn chỉnh
Thay vì duy trì hai bản sao hơi khác nhau của một script dài, hãy dùng ví dụ hoàn chỉnh trong kho công khai:
Xem selenium_proxy_check.py trên GitHub
Kho cũng gồm requirements.txt, .env.example, .gitignore và README hướng dẫn thiết lập.
4. Cấu hình môi trường và chạy kiểm thử
Đặt gateway proxy và trang đích trong shell:
export PROXY_SERVER="gw.kindproxy.com:12200"
export TARGET_URL="https://example.com/"
export EXPECTED_TEXT="Example Domain"
export CHROME_BINARY="/usr/bin/google-chrome"
export CHROMEDRIVER_PATH="/usr/local/bin/chromedriver"
export HEADLESS="true"
Các cài đặt timeout là tùy chọn:
export PAGE_LOAD_TIMEOUT="60"
export IP_CHECK_TIMEOUT="20"
export TARGET_WAIT_TIMEOUT="30"
EXPECTED_TEXT là tùy chọn. Nếu để trống hoặc không đặt, script tải trang đích mà không kiểm tra marker văn bản body cụ thể.
Chạy script:
python selenium_proxy_check.py
Với Windows PowerShell, đặt cùng các biến trước khi chạy Python:
$env:PROXY_SERVER = "gw.kindproxy.com:12200"
$env:TARGET_URL = "https://example.com/"
$env:EXPECTED_TEXT = "Example Domain"
$env:CHROME_BINARY = "C:\Program Files\Google\Chrome\Application\chrome.exe"
$env:CHROMEDRIVER_PATH = "C:\tools\chromedriver.exe"
$env:HEADLESS = "true"
python .\selenium_proxy_check.py
Điều chỉnh đường dẫn trình duyệt và driver cho khớp máy của bạn.
Không commit thông tin đăng nhập proxy thật, chi tiết tài khoản riêng hoặc bí mật khác vào kho công khai. Ví dụ này dùng IP allowlisting và không cần username hay password proxy.
5. Xác minh IP thoát và trang đích riêng biệt
Script thực hiện các kiểm tra khác nhau:
- Python gửi yêu cầu kiểm tra IP trực tiếp với proxy handler của chính nó bị tắt.
- Chrome do Selenium điều khiển mở dịch vụ kiểm tra IP qua proxy trình duyệt đã cấu hình.
- Script so sánh IP trực tiếp với IP thoát mà trình duyệt quan sát.
- Chrome mở trang đích và kiểm tra phản hồi riêng.
Một lần chạy thành công trông tương tự như sau:
Direct connection IP: <your-server-public-ip>
Browser exit IP: <proxy-exit-ip>
Direct and browser IPs are different; the proxy route appears active.
Page title: 'Example Domain'
Current URL: https://example.com/
Page content preview: '...'
Target page loaded: https://example.com/
Target page check: passed
Địa chỉ IP thực tế sẽ khác. Script không kỳ vọng một IP thoát proxy cố định.
Nếu IP trực tiếp và IP trình duyệt khác nhau, đó là bằng chứng Chrome đang dùng điểm thoát mạng khác. Đây là tín hiệu chẩn đoán hữu ích, không phải đảm bảo tuyệt đối với mọi đích. Proxy có thể chia sẻ điểm thoát với tuyến khác, hoặc mạng của máy có thể dùng định tuyến trong suốt.
Nếu vị trí proxy đã chọn quan trọng, hãy kiểm tra IP thoát của trình duyệt bằng nguồn GeoIP mà đội bạn tin cậy. Cơ sở dữ liệu GeoIP có thể không khớp nhau, nên hãy coi kết quả quốc gia là ước lượng chứ không phải đảm bảo về cách mọi website xác định vị trí.
Sau đó kiểm tra trang đích độc lập. Trang có thể dùng cookie, thị trường đã lưu, cài đặt tài khoản hoặc bộ chọn quốc gia thủ công ngoài vị trí IP. Yêu cầu thành công tới dịch vụ kiểm tra IP không đảm bảo site khác sẽ tải hoặc hiện nội dung địa phương hóa như ý.
6. Chrome, Firefox và Remote WebDriver
Ví dụ hoàn chỉnh dùng Chrome cục bộ. Đối tượng Proxy của Selenium là một phần cấu hình proxy của WebDriver, nhưng hỗ trợ trình duyệt và hành vi xác thực có thể khác. Hãy tách tùy chọn theo trình duyệt khỏi endpoint proxy và kiểm thử đúng trình duyệt bạn định chạy.
| Thiết lập | Nơi cấu hình trình duyệt | Chi tiết quan trọng |
|---|---|---|
| Chrome | ChromeOptions | Xác minh xác thực proxy HTTP riêng với địa chỉ proxy. |
| Firefox | FirefoxOptions | Kiểm tra hỗ trợ của Firefox với loại proxy và chế độ xác thực đã chọn. |
| Remote WebDriver / Grid | Browser capabilities được yêu cầu | Node trình duyệt phải tới được proxy; IP egress của nó có thể cần allowlisting. |
Với Remote WebDriver, cấu hình proxy trong tùy chọn trình duyệt gửi tới phiên từ xa. Kết nối proxy được thực hiện từ máy hoặc container chạy trình duyệt, không nhất thiết từ client Python. Với các trường proxy được Selenium hỗ trợ, xem tài liệu browser options .
7. Lỗi proxy Selenium thường gặp
| Triệu chứng | Việc cần kiểm tra |
|---|---|
NoSuchDriverException hoặc Selenium Manager không tải được ChromeDriver | Cài Chrome và ChromeDriver tương thích cục bộ, rồi đặt CHROME_BINARY và CHROMEDRIVER_PATH. Cách này tránh tải driver lúc runtime. |
407 Proxy Authentication Required | Kiểm tra host gateway, cổng, giao thức và phương thức xác thực. Với IP allowlisting, xác nhận IP egress công khai của máy chạy Chrome đã được thêm vào KindProxy IP Whitelist . |
| Chrome khởi động nhưng kiểm tra IP thoát trình duyệt hết thời gian chờ | Kiểm tra endpoint proxy, allowlist, cổng, quyền truy cập mạng ra ngoài và liệu dịch vụ kiểm tra IP có tới được qua proxy không. Trình duyệt vẫn có thể khởi động dù yêu cầu proxy đầu tiên chưa hoàn tất. |
| IP trực tiếp và IP thoát trình duyệt giống nhau | Xác nhận đối tượng proxy đã gắn vào options truyền cho webdriver.Chrome(). Kiểm tra lại endpoint và tuyến hiệu lực của trình duyệt. |
| Kiểm tra IP thành công nhưng trang đích thất bại | Kiểm tra đích riêng. Đích có thể không khả dụng hoặc trả về thử thách, lỗi truy cập hay nội dung khu vực khác. |
| Assertion văn bản mong đợi thất bại | Kiểm tra tiêu đề trang, URL hiện tại và bản xem trước body đã in. Đặt EXPECTED_TEXT thành văn bản thực sự xuất hiện trên trang, hoặc để trống để tắt assertion. |
| Điều hướng HTTPS báo lỗi TLS hoặc tunnel | Xác nhận cài đặt endpoint proxy HTTP/HTTPS và xem lỗi thực tế của trình duyệt. Đừng tắt kiểm tra chứng chỉ như cách sửa chung. |
Với thảo luận liên quan về xác thực proxy trình duyệt và lỗi kết nối, xem Xác thực proxy Playwright: lỗi kết nối thường gặp và cách khắc phục . Thiết lập theo trình duyệt khác nhau, nhưng nguyên tắc chẩn đoán tương tự: kiểm tra khởi động trình duyệt, kết nối proxy, IP thoát và trang đích riêng biệt.
8. Proxy dân cư cho kiểm thử Selenium
Proxy dân cư nhắm theo quốc gia có thể giúp đội QA xem website của họ phản hồi thế nào từ thị trường khác. Ví dụ, bạn có thể so sánh bộ chọn ngôn ngữ, hiển thị giá hoặc trang đích theo quốc gia từ hai vị trí kiểm thử.
Chọn loại session phù hợp luồng trình duyệt. Kiểm tra một trang có thể không cần cùng hành vi session như kiểm thử checkout nhiều bước, nơi điểm thoát mạng nên giữ nhất quán suốt luồng. Proxy đổi tuyến; assertion Selenium vẫn cần xác nhận site đã hiển thị gì.
Nếu bạn cần IP dân cư cho kiểm thử khu vực được ủy quyền, xem gói proxy dân cư KindProxy . Chọn quốc gia, hành vi session và phương thức xác thực khớp thiết lập trình duyệt bạn đã xác minh.
FAQ
Làm sao đặt proxy HTTP trong Selenium Python?
Tạo đối tượng Selenium Proxy, đặt địa chỉ proxy HTTP và SSL, rồi gắn vào tùy chọn Chrome hoặc Firefox dùng để khởi động trình duyệt. Kiểm tra IP thoát sau khi khởi chạy.
Làm sao thêm IP của tôi vào whitelist KindProxy?
Tìm IP egress công khai của máy chạy Chrome, đăng nhập bảng điều khiển KindProxy IP Whitelist và thêm địa chỉ IP đó. Với Selenium Grid, dùng IP egress công khai của node trình duyệt.
Cài đặt proxy chuẩn của Selenium có gửi được username và password HTTP không?
Mô hình proxy chuẩn của Selenium Python không định nghĩa trường username và password HTTP tổng quát. Hành vi xác thực phụ thuộc trình duyệt và cấu hình proxy, nên hãy xác minh đúng tổ hợp thay vì giả định chỉ URL proxy đã xử lý thông tin đăng nhập. Ví dụ hoàn chỉnh trong hướng dẫn này dùng IP allowlisting.
Cách này có hoạt động với Selenium Grid không?
Cài đặt proxy có thể gửi kèm browser capabilities được yêu cầu, nhưng node trình duyệt phải tới được proxy. Với IP allowlisting, dùng IP egress công khai của node.
Proxy có ngăn website hiện CAPTCHA không?
Không. Proxy thay đổi đường mạng hoặc vị trí thoát. Website quyết định trả về nội dung yêu cầu, lỗi hay trang thử thách.
Kết luận
Cài đặt proxy chuẩn của Selenium cho phép định tuyến lưu lượng trình duyệt qua endpoint HTTP/HTTPS. Một thiết lập đáng tin cậy còn cần phương thức xác thực tương thích, mục whitelist IP đúng khi dùng allowlisting, và kiểm tra riêng cho IP thoát cùng trang đích.
Bắt đầu với site bạn kiểm soát, thêm IP công khai của máy chạy Chrome vào whitelist proxy, xác nhận tuyến trình duyệt, rồi thêm assertion theo khu vực khớp mục tiêu kiểm thử.
Với ví dụ chạy được hoàn chỉnh, xem kho Selenium proxy Python của KindProxy trên GitHub . Nếu bạn đang thiết lập proxy dân cư cho QA khu vực hoặc kiểm thử trình duyệt, bạn cũng có thể xem gói proxy dân cư KindProxy .
