Xác thực proxy trong Selenium trở nên khó khăn khi trình duyệt—chứ không phải trang web—yêu cầu tên người dùng và mật khẩu. Giải pháp phù hợp phụ thuộc vào loại proxy, trình duyệt, phiên bản Selenium và liệu thông tin đăng nhập có thể được cung cấp bên ngoài quá trình kiểm thử hay không. Hướng dẫn này giải thích các phương pháp đáng tin cậy trong Selenium 4, những trường hợp mà các giải pháp thay thế cũ vẫn còn phù hợp và lý do tại sao mã xử lý cảnh báo thường bị lỗi.

Proxy là gì?

Máy chủ proxy là một trung gian gửi yêu cầu đến các trang web thay mặt cho trình duyệt của bạn. Trang web nhận được địa chỉ IP của máy chủ proxy thay vì máy đang chạy Selenium. Các nhóm kiểm thử sử dụng máy chủ proxy để xác thực trải nghiệm khu vực, định tuyến lưu lượng truy cập qua các mạng được kiểm soát, kiểm tra yêu cầu hoặc phân phối khối lượng công việc tự động.

URL proxy thường chứa tên máy chủ và cổng, ví dụ như: proxy.example.test:8080Các dịch vụ riêng tư cũng có thể yêu cầu tên người dùng và mật khẩu. Selenium có thể cấu hình điểm cuối proxy thông qua các tùy chọn trình duyệt, nhưng các lời nhắc xác thực được điều khiển bởi trình duyệt và không phải lúc nào cũng được hiển thị cho WebDriver giống như một biểu mẫu HTML thông thường.

Chọn mạng phù hợp: Địa chỉ IP tĩnh thuận tiện cho việc thiết lập danh sách cho phép, trong khi mạng xoay vòng phù hợp với việc thu thập dữ liệu quy mô lớn. Chúng tôi Hướng dẫn dành cho nhà cung cấp dịch vụ ủy quyền cư trú Giải thích những khác biệt thực tế.

Chỉ sử dụng tự động hóa khi bạn có quyền, tôn trọng các điều khoản của trang web và không để thông tin đăng nhập trong mã nguồn và nhật ký kiểm thử.

Sự khác biệt giữa SOCKS và Proxy HTTP

Máy chủ proxy HTTP hiểu lưu lượng truy cập web và thường được cấu hình với các giá trị HTTP và HTTPS riêng biệt. Máy chủ proxy SOCKS hoạt động ở cấp độ thấp hơn và có thể truyền tải nhiều loại lưu lượng TCP khác nhau mà không cần diễn giải giao thức ứng dụng. SOCKS5 còn hỗ trợ thêm xác thực và thường là phiên bản SOCKS được ưa chuộng.

Đặc điểm Máy chủ proxy HTTP/HTTPSproxy SOCKS5
Giao ThôngĐược thiết kế cho các yêu cầu web của trình duyệt.Hoạt động với nhiều ứng dụng dựa trên TCP.
Nhận thức về quy trìnhHiểu các yêu cầu và tiêu đề HTTP.Chuyển tiếp lưu lượng truy cập mà không cần đọc ngữ nghĩa HTTP.
Thiết lập SeleniumThiết lập các trường proxy HTTP và SSLThiết lập điểm cuối và phiên bản SOCKS.
Sử dụng điển hìnhKiểm thử web, lọc, bộ nhớ đệm, kiểm traĐường hầm linh hoạt và lưu lượng truy cập không phải HTTP

Trình duyệt và nhà cung cấp proxy phải hỗ trợ cùng một phương thức. Một điểm cuối hợp lệ không đảm bảo rằng Selenium có thể tự động hoàn thành hộp thoại nhập tên người dùng/mật khẩu gốc.

Cách xử lý Proxy trong Trình quản trị web Selenium trong Chrome

Đối với máy chủ proxy không yêu cầu xác thực tương tác, Selenium 4 có thể gán một Proxy chủ đề ChromeOptions. Hiện tại Tài liệu chính thức về tùy chọn trình duyệt của Selenium Điều này minh họa cách tiếp cận dựa trên năng lực.

import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

Proxy proxy = new Proxy();
proxy.setHttpProxy("proxy.example.test:8080");
proxy.setSslProxy("proxy.example.test:8080");

ChromeOptions options = new ChromeOptions();
options.setProxy(proxy);

WebDriver driver = new ChromeDriver(options);
driver.get("https://example.com");

Đối với SOCKS5, hãy thiết lập điểm cuối và phiên bản SOCKS thay thế:

Proxy proxy = new Proxy();
proxy.setSocksProxy("proxy.example.test:1080");
proxy.setSocksVersion(5);

ChromeOptions options = new ChromeOptions();
options.setProxy(proxy);

Việc sử dụng proxy xác thực đòi hỏi phải lên kế hoạch kỹ lưỡng hơn. Việc nhúng thông tin xác thực vào URL có thể bị các trình duyệt hiện đại từ chối và có thể làm lộ thông tin bí mật. Nên ưu tiên các phương pháp sau:

  1. Danh sách IP được phép: Cấp quyền cho địa chỉ IP công cộng cố định của máy chủ CI runner hoặc node Selenium Grid để không xuất hiện hộp thoại trên trình duyệt.
  2. Cổng cục bộ: Đặt một máy chủ proxy chuyển tiếp đáng tin cậy trên máy kiểm thử. Selenium kết nối cục bộ mà không cần thông tin đăng nhập, và cổng xác thực sẽ thực hiện xác thực ở phía máy chủ.
  3. Tiện ích mở rộng trình duyệt được kiểm soát: Tạo một tiện ích mở rộng Chrome nội bộ để cấu hình proxy và xử lý các yêu cầu xác thực. Chỉ tải tiện ích này từ một thư mục thử nghiệm được bảo vệ.
  4. Cấu hình cấp lưới: Cấu hình mạng và thông tin bí mật trên node Selenium thay vì phân phối thông tin đăng nhập cho từng bài kiểm thử.

Đọc thông tin xác thực từ trình quản lý bí mật hoặc cấu hình kiểm thử dành riêng cho môi trường. Tuyệt đối không lưu chúng vào Git, in chúng ra console hoặc đưa chúng vào ảnh chụp màn hình. Sau khi khởi chạy, hãy xác minh địa chỉ IP thoát với điểm cuối kiểm thử đã được phê duyệt trước khi tiếp tục bộ kiểm thử.

Lỗi thường gặp: ERR_PROXY_CONNECTION_FAILED Thông thường, điều này cho thấy máy chủ, cổng, giao thức hoặc đường dẫn mạng bị sai. Lặp lại 407 Proxy Authentication Required Các phản hồi cho thấy thông tin xác thực bị thiếu hoặc bị từ chối.

Sử dụng công cụ AutoIt

AutoIt có thể tự động hóa các hộp thoại Windows bằng cách định vị cửa sổ, nhập thông tin đăng nhập và nhấn nút. Trước đây, nó từng là một giải pháp thay thế phổ biến của Selenium vì WebDriver không thể vận hành các cửa sổ xác thực thuộc sở hữu của trình duyệt.

Phương pháp này dễ bị lỗi: nó chỉ hoạt động trên Windows, yêu cầu một môi trường desktop tương tác không bị khóa, phụ thuộc vào tiêu đề cửa sổ và thời gian, và thường thất bại trong các container không có giao diện người dùng hoặc các tác nhân CI từ xa. Nó cũng có thể tiết lộ mật khẩu thông qua các tập lệnh hoặc đối số quy trình.

Nếu môi trường cũ không cho phép lựa chọn nào khác, hãy biên dịch tập lệnh AutoIt, lưu trữ nó trong một vị trí lưu trữ kiểm thử được kiểm soát, truy xuất thông tin đăng nhập một cách an toàn trong quá trình chạy và chờ hộp thoại chính xác thay vì sử dụng thời gian chờ cố định. Giới hạn kỹ thuật này trong một trình chạy Windows biệt lập. Đối với các bộ kiểm thử dễ bảo trì, việc sử dụng danh sách cho phép IP, cổng kết nối hoặc các nút Grid được cấu hình tập trung là những lựa chọn an toàn hơn.

Sử dụng cảnh báo

Selenium có thể xử lý các thông báo JavaScript được tạo bởi mã trang web:

Alert alert = new WebDriverWait(driver, Duration.ofSeconds(10))
    .until(ExpectedConditions.alertIsPresent());
alert.accept();

Tuy nhiên, hộp thoại xác thực proxy thường là giao diện trình duyệt, chứ không phải là cảnh báo JavaScript. Do đó, driver.switchTo().alert() thường ném NoAlertPresentException Ngay cả khi cửa sổ yêu cầu xác thực hiển thị. Hạn chế tương tự cũng áp dụng cho nhiều hộp thoại xác thực cơ bản HTTP.

Chỉ sử dụng API cảnh báo sau khi xác nhận rằng WebDriver nhận diện được lời nhắc. Nếu không, hãy xóa lời nhắc thông qua cấu hình mạng hoặc sử dụng một trong các phương pháp proxy được xác thực như đã mô tả ở trên. Điều này ổn định hơn so với việc phối hợp các thao tác gõ phím với một cửa sổ mà Selenium không thể kiểm tra.

Câu Hỏi Thường Gặp

Selenium có thể thiết lập proxy trực tiếp không?

Đúng vậy. Selenium 4 có thể truyền các thiết lập HTTP, SSL hoặc SOCKS thông qua các tùy chọn và khả năng proxy của trình duyệt. Điều này cấu hình điểm cuối nhưng có thể không hoàn tất lời nhắc xác thực do trình duyệt sở hữu.

Tại sao định dạng username:password@host:port lại không hoạt động trong Chrome?

Các trình duyệt hiện đại có thể chặn thông tin đăng nhập được nhúng trong URL, và cú pháp này có thể làm rò rỉ thông tin bí mật vào nhật ký và lịch sử duyệt web. Thay vào đó, hãy sử dụng danh sách cho phép IP, cổng bảo mật hoặc cơ sở hạ tầng thử nghiệm được kiểm soát.

Selenium có thể xử lý đăng nhập proxy bằng switchTo().alert() không?

Thông thường là không. Xác thực proxy thường được sử dụng thông qua giao diện người dùng của trình duyệt chứ không phải là thông báo JavaScript, vì vậy WebDriver có thể báo cáo rằng không có thông báo nào tồn tại.

Xác thực proxy có hoạt động trong Chrome ở chế độ headless không?

Nó có thể hoạt động khi quá trình xác thực được giải quyết mà không cần lời nhắc tương tác. Danh sách cho phép IP, cổng cục bộ hoặc cấu hình cấp nút phù hợp hơn cho việc thực thi không có giao diện người dùng.

Tôi có nên sử dụng AutoIt để xác thực proxy Selenium không?

Chỉ sử dụng nó cho quy trình làm việc Windows cũ có giới hạn. Nó dễ bị lỗi trong CI và kém an toàn hơn so với việc loại bỏ hộp thoại thông qua cấu hình mạng.

Loại proxy nào là tốt nhất cho tự động hóa trình duyệt?

Việc lựa chọn loại proxy phụ thuộc vào nhiệm vụ được ủy quyền. Proxy HTTP đơn giản cho lưu lượng truy cập web, SOCKS5 linh hoạt, và mạng gia đình có thể hỗ trợ kiểm tra vị trí. Hãy so sánh các tùy chọn trong hướng dẫn về các loại proxy của chúng tôi.