WebDriver BiDi đã sẵn sàng hoạt động trên Firefox, Chrome và Puppeteer

Matthias Rohmer
Matthias Rohmer

Chỉ trong tuần trước, cùng với BrowserStack, chúng tôi đã công bố việc trở thành WebDriver BiDi sẵn sàng phát hành công khai trong BrowserStack. Tuần này, mùa hè của WebDriver BiDi tiếp tục với Firefox 129 và Puppeteer 23 đều nhận được hỗ trợ sẵn sàng phát hành cho WebDriver BiDi!

Mozilla là một cộng tác viên mạnh mẽ trên WebDriver BiDi trong hơn 4 năm hiện nay, bước đầu giúp định hình tiêu chuẩn mới rồi dần triển khai tệp trong Firefox, ghi lại tiến trình của chúng một cách gọn gàng bằng Bản tin Firefox WebDriver.

Với WebDriver BiDi hiện đã sẵn sàng được phát hành chính thức trong Firefox, Puppeteer, từ phiên bản 23, cung cấp hỗ trợ ổn định cho Firefox thông qua WebDriver BiDi. Lựa chọn này giúp bạn tự động hoá Firefox có API ngắn gọn như Chrome. Hỗ trợ của Puppeteer cho Chrome Giao thức Công cụ cho nhà phát triển (CDP) vẫn không thay đổi.

Firefox, CDP và Puppeteer

Puppeteer là một công cụ đáng tin cậy dành cho các nhà phát triển để tự động hoá các trình duyệt dựa trên Chromium bằng Chrome Giao thức Công cụ cho nhà phát triển, còn được gọi là CDP. Trong năm 2019 Puppeteer đã được hỗ trợ thử nghiệm cho Firefox.

Để thực hiện được điều 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 nó có một số cảnh báo:

  • Đúng như tên gọi, CDP được Công cụ cho nhà phát triển của Chrome sử dụng và cần phải thay đổi với các yêu cầu của Công cụ cho nhà phát triển.
  • CDP không được chuẩn hóa trong thông số kỹ thuật được chia sẻ, công khai và việc duy trì CDP trong Firefox đòi hỏi phải liên lạc ổn định và của chúng tôi.
  • 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 đủ hoạt động với Firefox, khiến người dùng nhầm lẫn.

Mặc dù chúng tôi rất vui vì đã duy trì được sự hỗ trợ này cùng với Mozilla cho trong vài năm qua, chúng tôi đã luôn biết rằng đó không phải là một giải pháp lâu dài. Xây dựng dựa trên điều này cũng như bao gồm cả các nhà cung cấp trình duyệt cũng như công cụ lớn khác, chúng ta đã cùng nhau tạo ra WebDriver BiDi.

Chung tay tạo ra thành công

Nhóm Firefox đang nỗ lực làm việc để triển khai WebDriver BiDi trên Firefox. Đồng thời, nhóm Puppeteer cũng đang mở rộng phạm vi hỗ trợ của WebDriver BiDi trên API Puppeteer. Mục tiêu mà cả hai nhóm cùng hướng tới là đáp ứng mọi API cần thiết cho các trường hợp sử dụng tự động hoá quá trình sản xuất khả dụng bằng WebDriver BiDi trong Puppeteer, đảm bảo hỗ trợ trong cả Chrome và Firefox.

Trang tổng quan về nhóm được chia sẻ hiển thị số lượt kiểm thử đã vượt qua trong vài tháng qua.
Trang tổng quan về nhóm được chia sẻ hiển thị số lượt kiểm thử đã vượt qua trong vài tháng qua.

Điều này cho phép người dùng Puppeteer chọn Firefox hoặc Chrome để tự động hoá, bằng cách chỉ định khoá cấu hình browser khi chạy Puppeteer thực thể.

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ề những tính năng mới trong Firefox 129 và hoạt động của Mozilla trên WebDriver BiDi xem bài đăng trên blog Mozilla Hacks có liên quan.

Hỗ trợ CDP trong tương lai

Đoạn mã trên cho thấy rằng để tự động hoá Chrome bằng cách sử dụng WebDriver BiDi với Puppeteer, bạn cần đặt protocol thành webDriverBiDi. Lý do là vì đối với Chrome, Puppeteer sẽ luôn 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 sẽ không còn được hỗ trợ từ Firefox 129 và được lên lịch xoá vào cuối năm 2024. Nếu bạn hiện có các quy trình tự động hoá dựa vào tính năng hỗ trợ CDP trong Firefox, chúng tôi đặc biệt bạn nên chuyển sang WebDriver BiDi. Nếu không được, hãy liên hệ với dev-webdriver@mozilla.org với trường hợp sử dụng của bạn.