6 điểm bởi xguru 2024-08-08 | 1 bình luận | Chia sẻ qua WhatsApp
  • Từ Puppeteer phiên bản 23, Firefox được hỗ trợ chính thức, nên giờ đây có thể dễ dàng thực hiện tự động hóa và kiểm thử end-to-end trên cả Chrome và Firefox
    • const browser = await puppeteer.launch({browser: "firefox"});
  • Tương tự Chrome, Puppeteer có thể tải xuống và chạy phiên bản Firefox ổn định mới nhất
  • Hỗ trợ Firefox dựa trên WebDriver BiDi, một giao thức đa trình duyệt hiện được triển khai trong Gecko và Chromium, thay vì giao thức tự động hóa chỉ dành riêng cho Firefox
    • Việc sử dụng giao thức đa trình duyệt giúp có thể dễ dàng hỗ trợ thêm nhiều trình duyệt hơn trong tương lai

Bối cảnh kỹ thuật

  • Cho đến gần đây, những ai muốn tự động hóa trình duyệt có hai lựa chọn chính
    • Sử dụng API WebDriver của W3C
    • Sử dụng API chuyên biệt theo từng trình duyệt (Chrome DevTools Protocol, Firefox Remote Debugging Protocol, v.v.)
  • Cả hai lựa chọn đều có những đánh đổi đáng kể
    • API WebDriver kiểu cổ điển dựa trên HTTP và vận hành theo mô hình gửi lệnh tới trình duyệt rồi chờ phản hồi
    • Điều này hoạt động tốt với các kịch bản tự động hóa như tải trang và kiểm tra xem phần tử có hiển thị hay không, nhưng không phù hợp với các trường hợp nâng cao như nhận sự kiện từ trình duyệt hoặc thực thi nhiều lệnh đồng thời
    • Các API riêng theo trình duyệt thường được thiết kế để hỗ trợ những trường hợp sử dụng phức tạp của công cụ dành cho nhà phát triển trong trình duyệt, nên cung cấp bộ tính năng vượt xa WebDriver
  • Vì vậy, các client tự động hóa trình duyệt buộc phải chọn giữa việc dùng một giao thức duy nhất để hỗ trợ nhiều trình duyệt nhưng chỉ có bộ tính năng hạn chế, hoặc cung cấp bộ tính năng phong phú hơn nhưng phải triển khai chức năng riêng cho từng trình duyệt được hỗ trợ
  • Điều này làm tăng chi phí và độ phức tạp để xây dựng tự động hóa đa trình duyệt chất lượng cao
  • Tình hình này tương tự như trước khi có LSP (Language Server Protocol)
  • WebDriver BiDi đưa bộ tính năng tự động hóa vốn bị giới hạn trong các giao thức riêng theo trình duyệt vào một giao thức chuẩn hóa, để có thể dùng trên mọi trình duyệt và công cụ tự động hóa

Loại bỏ hỗ trợ CDP (Chrome DevTools Protocol) thử nghiệm của Firefox

  • Trong giai đoạn đầu của nỗ lực cải thiện kiểm thử đa trình duyệt, Firefox đã cung cấp một phần triển khai CDP giới hạn ở một số lệnh và sự kiện cần thiết để hỗ trợ các trường hợp sử dụng kiểm thử
  • Tuy nhiên, khi ngày càng rõ ràng rằng đây không phải hướng phát triển của tự động hóa đa trình duyệt, các nỗ lực cho phần này đã bị dừng lại
  • Kết quả là nó không được bảo trì và cũng không tương thích với các tính năng Firefox hiện đại như site isolation
  • Vì vậy, hỗ trợ này dự kiến sẽ bị loại bỏ vào cuối năm 2024

Kế hoạch sắp tới

  • Vẫn còn một số API chưa được hỗ trợ
    • API chỉ có trong CDP
    • API cần thêm công việc chuẩn hóa
    • API đã có trong tiêu chuẩn nhưng vẫn chưa được triển khai
  • Sẽ xác định mức độ ưu tiên dựa trên phản hồi của người dùng

1 bình luận

 
xguru 2024-08-09

Ý kiến trên Hacker News

  • Việc nhóm Puppeteer rời Google sang Microsoft và tiếp tục phát triển Playwright là một đòn giáng mạnh vào Google

    • Google đã không nhận ra các công cụ tự động hóa trình duyệt quan trọng thế nào đối với chiến lược AI agent
    • Google hoặc phải từ bỏ Puppeteer và phụ thuộc vào MS/Playwright, hoặc phải tìm một hướng đi mới cho Puppeteer
    • WebDriver BiDi phát triển các ưu điểm của Chrome DevTools Protocol (CDP) theo một cách tiêu chuẩn hóa
  • Dù giao thức WebDriver BiDi không phải là giao thức để tạo ra trình duyệt, nhưng có vẻ nó có thể đảm nhiệm gần 90% vai trò đó

    • Gecko đã tiến bộ rất nhiều kể từ sau Servo, và hiện nay hiệu năng khá tốt
    • Việc tạo trình duyệt dựa trên Chromium dễ hơn rất nhiều so với tạo trình duyệt dựa trên Gecko
    • Có thể dùng API để điều hướng, chặn request, đọc console, chạy JS, v.v.
    • Sẽ rất hay nếu có thể loại bỏ browser chrome và tạo một trình duyệt tùy biến
  • Playwright hỗ trợ mọi engine kết xuất hiện đại (Chromium, WebKit, Firefox)

  • Tò mò về cây trợ năng

    • Lý do cây trợ năng bị loại khỏi Playwright là vì đó là bản dump cấu trúc dữ liệu nội bộ theo từng engine
    • Cây trợ năng là bản tóm tắt mọi thành phần ngữ nghĩa của trang, rất tuyệt cho snapshot test hoặc kiểm thử BDD
    • Mong rằng cây trợ năng sẽ được tiêu chuẩn hóa trên các engine trình duyệt chính
    • Từ góc độ phát triển web, sẽ rất tốt nếu cũng có thể truy cập nó ở các lớp khác như CSS và DOM