WebDriver BiDi là chuẩn W3C giúp Puppeteer và các công cụ khác điều khiển Chrome, Firefox. Nó thay đổi gì với phát hiện bot và tín hiệu nào vẫn lộ.
Nhiều năm qua, "tự động hóa Chrome" gần như đồng nghĩa với "nói chuyện bằng Chrome DevTools Protocol". Điều đó đang thay đổi: WebDriver BiDi là giao thức chuẩn của W3C, cho công cụ tự động hóa khả năng điều khiển theo sự kiện, theo thời gian thực tương tự, nhưng trên nhiều trình duyệt. Với người làm phát hiện tự động hóa, và với người có phiên CI bị gắn cờ, câu hỏi là các tín hiệu gắn với kênh cũ sẽ ra sao. Bài viết này giải thích BiDi là gì, tín hiệu phát hiện nào bị yếu đi và tín hiệu nào không bị ảnh hưởng.
Điểm chính cần nhớ
- WebDriver BiDi là giao thức hai chiều được chuẩn hóa. Nó chạy trên WebSocket, cho phép trình duyệt chủ động đẩy sự kiện tới client tự động hóa, và do Nhóm làm việc về kiểm thử và công cụ trình duyệt của W3C xây dựng. Đặc tả hiện vẫn là bản nháp làm việc (Working Draft).
- Nó ra đời để thay thói quen "cái gì cũng CDP". CDP gắn với Chrome DevTools và không phải chuẩn công khai dùng chung, còn BiDi kết hợp tính chuẩn hóa đa trình duyệt của WebDriver Classic với khả năng điều khiển cấp thấp, theo sự kiện kiểu CDP.
- Một nhóm tín hiệu yếu đi. Cách phát hiện dựa vào tác dụng phụ của chính CDP, chẳng hạn hành vi
Runtime.enabletrong bài về phát hiện tự động hóa CDP, có thể không quan sát được gì khi cùng một script điều khiển trình duyệt qua BiDi. - Phần lớn bộ tín hiệu còn lại không quan tâm đến giao thức.
navigator.webdriver, khác biệt kết xuất headless, thời gian hành vi và dấu vân tay tầng mạng mô tả trình duyệt và lưu lượng của nó, không phải định dạng truyền mà client tự động hóa dùng. - Cách ứng phó đúng là chấm điểm nhiều lớp, không phải một dấu hiệu duy nhất. Bên phòng thủ nên coi "có tác dụng phụ CDP" là một đầu vào sẽ kích hoạt ít dần theo thời gian.
WebDriver BiDi là gì
WebDriver có hai thế hệ. WebDriver Classic là giao thức yêu cầu – phản hồi mà Selenium dùng từ những ngày đầu: client gửi lệnh, trình duyệt trả lời, và mọi thứ xảy ra ở giữa thì client phải thăm dò. Chrome DevTools Protocol (CDP) là đánh đổi ngược lại: nhanh, hai chiều và cấp thấp, nhưng được thiết kế cho DevTools của chính Chrome và không phải chuẩn công khai dùng chung.
Đặc tả WebDriver BiDi muốn lấy phần tốt của cả hai. Theo lời nhóm Chrome trong bài giới thiệu giao thức, đây là giao thức tự động hóa chuẩn mới nhằm kết hợp điểm mạnh của WebDriver Classic và CDP: nhắn tin hai chiều, điều khiển cấp thấp và có chuẩn W3C đứng sau. "Hai chiều" nghĩa là trình duyệt có thể đẩy sự kiện tới client ngay khi nó xảy ra, như một thông điệp console, một yêu cầu mạng hay một lần điều hướng, thay vì chờ được hỏi.
Cũng bài đó nói rõ BiDi không đơn thuần là CDP đổi tên. CDP có những phần riêng của Chrome và DevTools, không thể chép nguyên vào đặc tả đa trình duyệt; và BiDi phải giữ số lượt đi – về thấp vì client và trình duyệt có thể không nằm trên cùng một máy. Áp lực thiết kế đó khiến lệnh và sự kiện của BiDi khác CDP, và điều này quan trọng với phát hiện vì các tác dụng phụ quan sát được cũng khác.
Mức độ áp dụng hiện nay
Tiến độ áp dụng được theo dõi qua thông báo của chính các công cụ, nên trích ngày tháng sẽ tốt hơn đoán lộ trình. Bài của nhóm Chrome về việc WebDriver BiDi sẵn sàng cho môi trường production nêu rằng Firefox 129 và Puppeteer 23 đều có hỗ trợ sẵn sàng cho production: từ Puppeteer 23, nó cung cấp tự động hóa Firefox ổn định qua BiDi, trong khi hỗ trợ CDP của Puppeteer giữ nguyên.
Trước đó, hỗ trợ Firefox của Puppeteer dựa vào việc Mozilla cài đặt và duy trì một tập con của CDP trong Firefox; bài viết mô tả đó là giải pháp tạm, không thể đảm bảo toàn bộ API của Puppeteer. BiDi thay thế cách sắp xếp này bằng một chuẩn chung. Nói cách khác: tự động hóa Firefox chuyển sang BiDi trước, còn tự động hóa Chromium qua Puppeteer vẫn thường dùng CDP. "Thay thế CDP" là một hướng đi, không phải cuộc chuyển đổi đã hoàn tất. Hãy xem ghi chú phát hành hiện tại của framework bạn dùng trước khi kết luận một phiên đã dùng giao thức nào.
Điều gì thay đổi với phát hiện
Điểm liên quan đến phát hiện khá hẹp và cần nói chính xác. Những kỹ thuật suy ra "có client CDP đang gắn vào" từ điều CDP gây ra bên trong renderer, như kênh phụ được mô tả trong bài về phát hiện CDP, phụ thuộc vào việc một miền CDP được bật. Nếu script điều khiển trình duyệt qua BiDi, những tác dụng đó có thể đơn giản là không xảy ra. Bộ phát hiện chỉ dựa vào phép kiểm tra này sẽ thấy ít kết quả dương hơn, không phải vì lưu lượng trở nên giống người, mà vì kênh điều khiển đã đổi.
Có hai lưu ý để tránh phóng đại thay đổi này. Thứ nhất, các bản cài đặt BiDi còn mới, và cách một framework hay bản dựng trình duyệt cụ thể cấu hình phiên là chi tiết triển khai có thể đổi giữa các phiên bản; nhận định về một công cụ cụ thể nên đối chiếu với tài liệu của nó. Thứ hai, một trình duyệt có thể được điều khiển đồng thời qua nhiều giao thức, và một số framework vẫn dùng CDP song song với BiDi cho các tính năng BiDi chưa bao phủ, nên phiên không tự động "sạch CDP" chỉ vì có dùng BiDi.
Những gì vẫn bị phát hiện dù dùng giao thức nào
Giao thức chỉ là đường truyền giữa client tự động hóa và trình duyệt. Mọi thứ mô tả chính trình duyệt và hành vi của nó đều không bị ảnh hưởng.
| Tín hiệu | Vì sao giao thức không làm thay đổi |
|---|---|
navigator.webdriver | Các đặc tả WebDriver định nghĩa trạng thái "webdriver-active" cho trình duyệt đang bị điều khiển từ xa, và phần xử lý phiên của BiDi đặt và xóa nó. Cờ có lộ ra trong một phiên cụ thể hay không là chuyện của trình duyệt và framework, nên hãy kiểm tra thay vì giả định. |
| Dấu hiệu kết xuất headless | Đồ họa kết xuất bằng phần mềm, thiếu plugin và kích thước cửa sổ mặc định đến từ cách trình duyệt được khởi chạy. Xem phát hiện trình duyệt headless. |
| Thời gian hành vi | Nhịp nhập liệu quá đều và thiếu chuyển động con trỏ là thuộc tính của script. Xem phát hiện bot theo hành vi. |
| Dấu vân tay tầng mạng | Dấu vân tay TLS và HTTP/2 đến từ ngăn xếp mạng của trình duyệt và uy tín của IP, không phải từ kênh điều khiển. |
Đó là lý do hệ thống phát hiện trưởng thành cộng nhiều tín hiệu yếu thành một điểm số. Mất một nhóm là điều dự kiến được; bài tổng quan kỹ thuật phát hiện bot trình bày phần còn lại của bộ tín hiệu này.
Nếu bạn chạy tự động hóa và bị gắn cờ
Kỹ sư kiểm thử và nhóm giám sát thường là bên bị hệ thống phát hiện "chặn nhầm": một tác vụ CI hợp lệ bị chặn lại ở trang xác minh. Đổi giao thức không phải cách khắc phục, và bài này không khuyến nghị điều đó. Những bước hữu ích khá đơn giản: chạy bộ kiểm thử với các trang bạn kiểm soát hoặc được phép kiểm thử, thống nhất với chủ trang để đưa dải IP của CI vào danh sách cho phép, và dùng kênh chính thức nếu có: các dịch vụ chấp nhận lưu lượng tự động thường cung cấp cách để client tự xưng danh, chẳng hạn API hoặc yêu cầu có chữ ký, đáng tin cậy hơn nhiều so với cố tỏ ra giống người. Bài của chúng tôi về AI agent duyệt web nói về việc ranh giới giữa "bot" và "phần mềm hành động thay người dùng" đang được vẽ lại ra sao.
Để xem phiên trình duyệt của chính bạn để lộ gì, hãy mở công cụ phát hiện bot: nó liệt kê các cờ tự động hóa mà phiên hiện tại phát ra, cùng loại kiểm tra mà một hệ thống phát hiện thực thụ kết hợp lại.
Câu hỏi thường gặp
WebDriver BiDi có thay thế CDP không?
Không hoàn toàn, và cũng chưa ở mọi nơi. BiDi là chuẩn được thiết kế để mang lại cho tự động hóa đa trình duyệt khả năng điều khiển theo sự kiện mà trước đây chủ yếu đến từ CDP. Firefox 129 và Puppeteer 23 đã đạt hỗ trợ BiDi sẵn sàng cho production, nhưng hỗ trợ CDP trong Puppeteer vẫn còn, và tự động hóa Chromium thường vẫn dùng nó.
BiDi có khiến tự động hóa không thể bị phát hiện không?
Không. Nó loại bỏ một họ tín hiệu, là tác dụng phụ của client CDP đang gắn vào, nhưng navigator.webdriver, khác biệt kết xuất headless, thời gian hành vi và dấu vân tay mạng đều độc lập với giao thức chuyển lệnh.
navigator.webdriver còn xuất hiện khi dùng BiDi không?
Các đặc tả WebDriver gắn thuộc tính này với việc trình duyệt bị điều khiển từ xa, và phiên BiDi cũng tham gia cùng cơ chế "webdriver-active". Cách một bản dựng trình duyệt hay framework cụ thể cấu hình nó có thể khác nhau, nên hãy xem tài liệu cho đúng phiên bản bạn dùng thay vì phỏng đoán.
Vì sao BiDi quan trọng với bên phòng thủ?
Vì bộ phát hiện được chỉnh theo tác dụng phụ của CDP sẽ báo thiếu một cách âm thầm khi ngày càng nhiều lưu lượng chuyển sang BiDi. Theo dõi tỷ lệ kết quả dương của tín hiệu đó theo thời gian và dựa nhiều hơn vào các tín hiệu độc lập với giao thức sẽ giữ độ bao phủ ổn định.


