Mới tuần trước, cùng với BrowserStack, chúng tôi đã thông báo rằng WebDriver BiDi đã sẵn sàng ra mắt trong BrowserStack. Tuần này, mùa hè của WebDriver BiDi sẽ tiếp tục với Firefox 129 và Puppeteer 23, cả hai phiên bản này đều được hỗ trợ sẵn sàng phát hành công khai cho WebDriver BiDi!
Mozilla đã là một cộng tác viên tích cực trên WebDriver BiDi trong hơn 4 năm qua, ban đầu giúp định hình tiêu chuẩn mới, sau đó từng bước triển khai tiêu chuẩn đó trong Firefox, ghi lại tiến trình của họ một cách gọn gàng thông qua Thông báo của WebDriver Firefox.
Với WebDriver BiDi hiện đã sẵn sàng cho bản phát hành chính thức trong Firefox, Puppeteer, từ phiên bản 23, sẽ hỗ trợ ổn định cho Firefox thông qua WebDriver BiDi. Điều này cho phép bạn tự động hoá Firefox bằng cùng một API ngắn gọn như Chrome. Hỗ trợ của Puppeteer cho Giao thức Công cụ cho nhà phát triển của Chrome (CDP) vẫn không thay đổi.
Firefox, CDP và Puppeteer
Puppeteer là một công cụ đáng tin cậy để nhà phát triển tự động hoá các trình duyệt dựa trên Chromium bằng cách sử dụng Giao thức DevTools của Chrome, còn gọi là CDP. Năm 2019, Puppeteer đã được hỗ trợ thử nghiệm cho Firefox.
Để làm được việc này, Mozilla đã triển khai và duy trì một tập hợp con của CDP trong Firefox. Giải pháp này cho phép Firefox được tự động hoá bằng API Puppeteer, nhưng có một số điểm cần lưu ý:
- Như tên gọi, CDP được Công cụ của Chrome cho nhà phát triển sử dụng và cần thay đổi theo yêu cầu của Công cụ của Chrome cho nhà phát triển.
- CDP không được chuẩn hoá trong thông số kỹ thuật được chia sẻ, công khai và việc duy trì CDP trong Firefox đòi hỏi nỗ lực và giao tiếp ổn định.
- Vì Firefox chỉ triển khai một tập hợp con của CDP, nên Puppeteer không bao giờ có thể đảm bảo API đầy đủ của nó hoạt động với Firefox, gây nhầm lẫn cho người dùng.
Mặc dù rất vui khi được duy trì dịch vụ hỗ trợ này cùng với Mozilla trong vài năm qua, nhưng chúng tôi luôn biết rằng đây không phải là giải pháp lâu dài. Dựa trên mối quan hệ hợp tác này, bao gồm cả các nhà cung cấp công cụ và trình duyệt lớn khác, chúng tôi đã cùng nhau tạo ra WebDriver BiDi.
Hợp tác với đồng đội để cùng chiến thắng
Nhóm Firefox đang nỗ lực triển khai WebDriver BiDi trong Firefox. Đồng thời, nhóm Puppeteer đã mở rộng tính năng hỗ trợ WebDriver BiDi trên API Puppeteer. Mục tiêu mà cả hai nhóm đều hướng đến là cung cấp mọi API cần thiết cho các trường hợp sử dụng tự động hoá sản xuất bằng cách sử dụng WebDriver BiDi trong Puppeteer, đảm bảo hỗ trợ cả Chrome và Firefox.
Điều này cho phép người dùng Puppeteer chọn Firefox hoặc Chrome cho các hoạt động tự động hoá của họ, bằng cách chỉ định khoá cấu hình browser
khi khởi chạy một thực thể Puppeteer.
import puppeteer from 'puppeteer';
const firefoxBrowser = await puppeteer.launch({
browser: 'firefox', // WebDriver BiDi is used by default in Firefox.
});
const page = await firefoxBrowser.newPage();
...
await firefoxBrowser.close();
const chromeBrowser = await puppeteer.launch({
browser: 'chrome',
protocol: 'webDriverBiDi', // CDP would be used by default for Chrome.
});
const page = await chromeBrowser.newPage();
...
await chromeBrowser.close();
Để tìm hiểu thêm về tính năng mới trong Firefox 129 và công việc của Mozilla trên WebDriver BiDi, hãy xem bài đăng trên blog Mozilla Hacks có liên quan.
Hỗ trợ CDP trong tương lai
Đoạn mã trước cho thấy để tự động hoá Chrome bằng WebDriver BiDi với Puppeteer, bạn cần đặt protocol
thành webDriverBiDi
một cách rõ ràng. Lý do là vì đối với Chrome, Puppeteer sẽ tiếp tục đặt mặc định là CDP – để không làm hỏng các quy trình tự động hoá hiện có, nhưng cũng để tiếp tục hỗ trợ các quy trình tự động hoá dành riêng cho các tính năng của Chrome.
Tính năng hỗ trợ CDP trong Firefox không còn được dùng nữa từ Firefox 129 và dự kiến sẽ bị xoá vào cuối năm 2024. Nếu bạn đang có các quy trình tự động hiện có dựa vào tính năng hỗ trợ CDP trong Firefox, bạn nên di chuyển sang WebDriver BiDi. Nếu không thể, hãy liên hệ với dev-webdriver@mozilla.org về trường hợp sử dụng của bạn.