Quay lại danh sách
Cấu hình proxy cho Selenium WebDriver trong Python để tránh chặn IP

Cấu hình proxy cho Selenium WebDriver trong Python để tránh chặn IP

26 tháng 6, 2026

Giới thiệu

Khi tự động hoá trình duyệt với Selenium để thu thập dữ liệu, kiểm thử hoặc thực hiện các tác vụ lặp đi lặp lại, việc bị chặn IP là một thách thức phổ biến. Các trang web hiện nay thường dùng các biện pháp chống bot như giới hạn tốc độ, CAPTCHA hoặc甚至完全封禁 IP. Sử dụng proxy giúp thay đổi địa chỉ IP xuất hiện, giảm nguy cơ bị phát hiện và duy trì sự ổn định của quy trình tự động hoá.

Bài viết này sẽ hướng dẫn bạn cấu hình proxy cho Selenium WebDriver bằng Python, từ việc chọn loại proxy phù hợp, thiết lập mã nguồn, tới kiểm tra và khắc phục lỗi. Mặc dù chúng tôi sẽ nhắc tới RoProxy như một nhà cung cấp proxy chất lượng, nhưng trọng tâm là cung cấp kiến thức thực tiễn mà bạn có thể áp dụng với bất kỳ dịch vụ proxy nào.

Tại sao cần proxy khi dùng Selenium

  1. Tránh chặn IP: Mỗi request từ cùng một IP sẽ dễ dàng được ghi nhận và đưa vào danh sách đen nếu tần suất quá cao.
  2. Giả lập vị trí địa lý: Một số nội dung chỉ hiển thị cho người dùng từ bepaalde khu vực. Proxy cho phép bạn chọn IP từ quốc gia hoặc thành phố mong muốn.
  3. Tăng độ ẩn: Khi kết hợp với các技巧 như xoay user-agent hoặc thay đổi fingerprint, proxy giúp làm mờ dấu vết thực tế của bạn.
  4. Quản lý nhiều tài khoản: Đăng nhập vào nhiều tài khoản trên cùng một trang web mà không gây nghi ngờ về hoạt động bất thường.

Lựa chọn loại proxy phù hợp

Proxy datacenter

  • Ưu điểm: Rẻ, tốc độ cao, dễ dàng mở rộng.
  • Nhược điểm: Dễ bị nhận diện vì dải IP thường thuộc về trung tâm dữ liệu và thường nằm trong danh sách đen của nhiều trang web.

Proxy residential

  • Ưu điểm: IP được cung cấp bởi nhà cung cấp internet gia đình, trông giống như người dùng thực tế, khả năng bị chặn thấp hơn.
  • Nhược điểm: Chi phí cao hơn và tốc độ có thể thay đổi tùy thuộc vào mạng gia đình.

Proxy mobile

  • Ưu điểm: IP từ mạng di động (3G/4G/5G), rất khó bị chặn vì thường thay đổi thường xuyên.
  • Nhược điểm: Giá thành cao nhất và đôi khi có giới hạn băng thông.

Proxy ISP (static residential)

  • Kết hợp ổn định của datacenter với độ tin cậy của residential, IP cố định nhưng được đăng ký tại ISP.

Khi nào chọn loại nào?

  • Nếu bạn cần lượng lớn request với chi phí thấp và có thể chấp nhận mức rủi ro trung bình → datacenter.
  • Nếu mục tiêu là truy cập trang web có bảo mật cao (ngân hàng, soziale mạng) → residential hoặc mobile.
  • Nếu cần IP ổn định cho một phiên làm việc dài (ví dụ: đăng nhập và duy trì session) → ISP hoặc sticky session.

Cấu hình proxy cho Selenium WebDriver trong Python

Chuẩn bị môi trường

pip install selenium
# tùy chọn: webdriver-manager để tự động tải driver
pip install webdriver-manager

Ví dụ cơ bản với proxy datacenter

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager

# Thông tin proxy (thay bằng thông tin thực tế của bạn)
PROXY_HOST = "proxy.example.com"
PROXY_PORT = 8080
PROXY_USER = "username"   # nếu proxy yêu cầu xác thực
PROXY_PASS = "password"

chrome_options = Options()
# Xây dựng chuỗi proxy
if PROXY_USER and PROXY_PASS:
    proxy_string = f"{PROXY_HOST}:{PROXY_PORT}"  # sẽ xử lý xác thực qua extension
else:
    proxy_string = f"{PROXY_HOST}:{PROXY_PORT}"  

chrome_options.add_argument(f'--proxy-server={proxy_string}')

# Nếu proxy yêu cầu xác thực, chúng ta cần tạo một extension Chrome để cung cấp username/password
# Dưới đây là cách đơn giản sử dụng seleniumwire (thư viện hỗ trợ proxy xác thực)
# Nếu không muốn dùng extension, bạn có thể sử dụng seleniumwire như sau:

# pip install seleniumwire
# from seleniumwire import webdriver  # thay vì selenium.webdriver

# options = webdriver.ChromeOptions()
# options.add_argument(f'--proxy-server={proxy_string}')
# seleniumwire_options = {
#     'proxy': {
#         'http': f'http://{PROXY_USER}:{PROXY_PASS}@{PROXY_HOST}:{PROXY_PORT}',
#         'https': f'http://{PROXY_USER}:{PROXY_PASS}@{PROXY_HOST}:{PROXY_PORT}',
#         'no_proxy': 'localhost,127.0.0.1'
#     }
# }
# driver = webdriver.Chrome(seleniumwire_options=seleniumwire_options, options=options, service=Service(ChromeDriverManager().install()))

# Trường hợp không cần xác thực:
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)

try:
    driver.get("https://httpbin.org/ip\))  # trang test trả về IP hiện tại
    print(driver.page_source)
finally:
    driver.quit()

Giải thích:

  • Thêm tham số --proxy-server để chỉ định proxy mà Chrome sẽ sử dụng.
  • Nếu proxy cần xác thực, bạn có hai lựa chọn chính:
    1. Sử dụng seleniumwire – một wrapper cho Selenium cho phép chỉ định proxy có username/password trực tiếp trong capabilities.
    2. Tạo một Chrome extension nhỏ chứa file manifest.jsonbackground.js để cung cấp credentials. Cách này phức tạp hơn nhưng không phụ thuộc vào thư viện bên ngoài.

Cấu hình proxy residential/ mobile với RoProxy (ví dụ)

Giả sử bạn đã mua gói proxy residential từ RoProxy và nhận được thông tin:

  • Host: gate.roproxy.com
  • Port: 10000
  • Username: user_12345
  • Password: pass_abcde

Bạn có thể sử dụng seleniumwire như sau:

from seleniumwire import webdriver  # lưu ý import từ seleniumwire
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager

PROXY_HOST = "gate.roproxy.com"
PROXY_PORT = 10000
PROXY_USER = "user_12345"
PROXY_PASS = "pass_abcde"

chrome_options = Options()
chrome_options.add_argument(f'--proxy-server={PROXY_HOST}:{PROXY_PORT}')

seleniumwire_options = {
    'proxy': {
        'http': f'http://{PROXY_USER}:{PROXY_PASS}@{PROXY_HOST}:{PROXY_PORT}',
        'https': f'http://{PROXY_USER}:{PROXY_PASS}@{PROXY_HOST}:{PROXY_PORT}',
        'no_proxy': 'localhost,127.0.0.1'
    }
}

driver = webdriver.Chrome(
    seleniumwire_options=seleniumwire_options,
    options=chrome_options,
    service=Service(ChromeDriverManager().install())
)

driver.get("https://ipinfo.io/json\))  # kiểm tra IP và vị trí
print(driver.page_source)
driver.quit()

Sử dụng sticky session (session cố định)

Một số nhà cung cấp proxy cho phép giữ cùng một IP trong một khoảng thời gian nhất định (sticky session). Điều này hữu ích khi bạn cần duy trì trạng thái đăng nhập hoặc cookie trong quá trình làm việc.

  • Khi cấu hình, bạn thường chỉ cần thêm một tham số đặc biệt vào username, ví dụ: user_12345-session-10.
  • Kiểm tra tài liệu của nhà cung cấp để biết cú pháp cụ thể.

Xử lý lỗi thường gặp

Lỗi ERR_PROXY_CONNECTION_FAILED

  • Nguyên nhân: Proxy không erreichable (sai host/port, mạng chặn, proxy đã hết hạn).
  • Khắc phục: Ping host, telnet tới port, kiểm tra lại username/password nếu có.

Lỗi 407 Proxy Authentication Required

  • Nguyên nhân: Thiếu hoặc sai thông tin xác thực.
  • Khắc phục: Đảm bảo bạn đang truyền đúng scheme (http://user:pass@host:port) trong seleniumwire_options hoặc sử dụng extension đúng cách.

Lỗi TimeoutException khi tải trang

  • Nguyên nhân: Proxy chậm hoặc bị过载.
  • Khắc phục: Thử chuyển sang proxy khác, tăng thời gian timeout (driver.set_page_load_timeout(30)), hoặc sử dụng proxy có băng thông cao hơn.

Lỗi CAPTCHA xuất hiện thường xuyên

  • Nguyên nhân: IP vẫn bị nghi ngờ là bot dù đã dùng proxy.
  • Khắc phục:
    • Xoay proxy thường (mỗi request hoặc mỗi pochi phút).
    • Thay đổi User-Agent và các header HTTP.
    • Kết hợp với dịch vụ giải CAPTCHA (2Captcha, Anti-Captcha) nếu không thể tránh được.

Kiểm tra và xác nhận proxy hoạt động

Sau khi khởi tạo driver, bạn nên luôn chạy một lệnh kiểm tra nhanh:

driver.get("https://httpbin.org/ip\))  # hoặc https://ipinfo.io/json
ip_info = driver.find_element(By.TAG_NAME, "pre\)).text
print(ip_info)

Kết quả nên hiển thị IP khác so với IP thực tế của máy bạn. Nếu thấy IP của bạn, nghĩa là cấu hình proxy chưa được áp dụng đúng.

Bạn cũng có thể kiểm tra header Via hoặc X-Forwarded-For bằng cách truy cập trang web trả về header request (ví dụ: https://requestbin.com/).

Lưu ý về hiệu suất và bảo mật

  1. Hết tốc độ: Proxy thêm một lớp trung gian, do đó latency sẽ tăng. Chọn proxy có vị trí địa lý gần với máy chủ đích để giảm ping.
  2. An toàn dữ liệu: Đảm bảo proxy bạn sử dụng hỗ trợ kết nối TLS (HTTPS) để tránh việc dữ liệu bị sniffed khi qua proxy.
  3. Giới hạn bandwidth: Một số gói proxy có giới hạn traffic mỗi tháng; hãy theo dõi sử dụng để evitare lỗi 502 Bad Gateway do vượt quá quota.
  4. Luôn đóng driver: Sau mỗi phiên làm việc, gọi driver.quit() để giải phóng tài nguyên và tránh để lại các tiến trình zombie.

Kết luận

Việc tích hợp proxy vào Selenium WebDriver là một bước quan trọng để xây dựng các công cụ tự động hoá ổn định, đặc biệt khi làm việc với các trang web có các biện pháp chống bot nghiêm ngặt. Bài viết đã cung cấp:

  • Lý do tại sao proxy cần thiết.
  • Hướng dẫn chọn loại proxy phù hợp với mục đích sử dụng.
  • Mã mẫu chi tiết cho việc cấu hình proxy bằng Selenium (có và không xác thực) bằng Python, bao gồm cả sử dụng seleniumwire để xử lý proxy cần username/password.
  • Các lỗi thường gặp và cách khắc phục.
  • Mẹo kiểm tra hoạt động và lưu ý về hiệu suất cũng như bảo mật.

Áp dụng những kiến thức trên, bạn có thể giảm đáng kể nguy cơ bị chặn IP, duy trì sự ẩn danh và mở rộng khả năng thu thập dữ liệu hoặc tự động hoá các tác vụ trên web mà không bị gián đoạn. Hãy thử nghiệm với một số proxy khác nhau (datacenter, residential, mobile) để tìm ra sự cân bằng tối ưu giữa chi phí, tốc độ và độ tin cậy cho dự án của mình. Chúc bạn thành công!