Chuyển đến nội dung
Extension · MV2 · MV3 · headless

Chrome extension, kể cả Manifest V2

Truyền vào danh sách thư mục extension đã giải nén, Clearcote sẽ nạp chúng khi khởi chạy. Manifest V3 hoạt động, và Manifest V2 cũng vậy dù Chrome gốc đã tắt hẳn nó, nên các content blocker MV2 và công cụ nội bộ đời cũ vẫn tiếp tục chạy. Cả ở chế độ headless.

Có ở mọi gói, trên Windows và Linux.

Một danh sách thư mục

from clearcote import launch_persistent_context

ctx = launch_persistent_context(
    "./profile",
    extensions=["./ext/ublock", "./ext/my-helper"],   # unpacked directories, MV2 or MV3
    headless=True,                                     # works headed too
)
page = ctx.pages[0] if ctx.pages else ctx.new_page()
page.goto("https://example.com")

Điểm nổi bật

Manifest V2 vẫn chạy

Bộ patch quyền riêng tư upstream khôi phục hỗ trợ MV2, nên các trình chặn chỉ có bản MV2 và những công cụ cũ vẫn tiếp tục chạy ở đây, dù đã ngừng hoạt động trên Chrome.

Headless và headed

Extension được nạp ở cả chế độ headless lẫn headed, không cần màn hình ảo chỉ để chạy được một extension.

Cặp flag, đã được xử lý sẵn

Nếu chỉ có --load-extension thì flag này bị bỏ qua khi chạy automation. SDK đặt nó cùng với --disable-extensions-except, nên extension thực sự xuất hiện.

Thư mục, không phải file .crx

Trỏ tới thư mục chứa manifest.json. Giải nén một file .crx sẽ ra một thư mục như vậy.

Windows và Linux

Cùng một tùy chọn trên cả hai nền tảng, headed lẫn headless.

Code của bạn, dấu vết của bạn

Clearcote không che giấu extension. Nên ưu tiên những extension không có web_accessible_resources, vì trang web có thể dò tìm chúng.

Extension được nạp như thế nào

Extension cần một profile để tồn tại. launch() chạy trên một profile dùng một lần, nên nó nhận extension, và launch_persistent_context / launchPersistentContext cùng serve() cũng vậy (.NET: Extensions). Chỉ những kiểu khởi chạy ẩn danh (incognito) là không nạp được (ephemeral_profile=False, launch() của async API, LaunchAsync của .NET). Trình duyệt hosted không nạp extension.

Clearcote không thể cài đặt hay cập nhật extension từ Chrome Web Store: các patch quyền riêng tư upstream đã gỡ bỏ phần tích hợp đó, nên extension nạp theo cách này sẽ không bao giờ tự cập nhật. Thay vào đó, hãy đóng gói thư mục đã giải nén kèm theo code automation của bạn, đúng mô hình mà Playwright và Puppeteer đang dùng.

Extension là thứ quan sát được. Content script viết lại DOM, chèn style hay chặn request đều làm thay đổi những gì trang đo được, và các web-accessible resource đã khai báo thì trang nào cũng fetch được. Nếu bạn chỉ cần chặn request, Network.setBlockedURLs của CDP ở tầng automation sẽ chặn theo pattern URL mà không để lộ bề mặt extension nào và vẫn giữ cache (route() của Playwright cũng dùng được, nhưng sẽ tắt cache).

Mọi người dùng nó để làm gì

Chặn nội dung

Chạy bản MV2 của một trình chặn mà Chrome không còn nạp nữa.

Test extension của chính bạn

Test end-to-end cho extension, ở chế độ headless, trong CI.

Công cụ nội bộ

Extension nội bộ của công ty để hỗ trợ đăng nhập, chú thích hay QA, chạy ngay trong các phiên tự động.

Clearcote được xây dựng cho quyền riêng tư, kiểm thử, nghiên cứu và tự động hóa hợp pháp. Bạn chịu trách nhiệm về cách mình sử dụng nó và về việc tuân thủ điều khoản của các trang web bạn truy cập.

Gói nào có tính năng này

Có ở mọi gói, trên Windows và Linux, cả chế độ headed lẫn headless.

So sánh các gói

Câu hỏi thường gặp

Playwright có nạp được Chrome extension ở chế độ headless không?

Với Clearcote thì có. Truyền các thư mục extension đã giải nén vào extensions của launch() hoặc của một persistent context, và chúng sẽ được nạp ở cả chế độ headless lẫn headed, không cần thêm flag nào.

Manifest V2 có còn hoạt động không?

Có. Chrome gốc đã tắt hẳn MV2, nhưng bộ patch quyền riêng tư upstream mà Clearcote dựa trên đã khôi phục nó, nên cả extension MV2 lẫn MV3 đều chạy được.

Có cài được extension từ Chrome Web Store không?

Không. Phần tích hợp Web Store đã bị gỡ bỏ cùng với các dịch vụ khác của Google. Hãy tải về hoặc tự build extension, giải nén nếu đó là file .crx, rồi truyền thư mục vào.

Vì sao extension của tôi không hiện lên?

Thường là do đường dẫn: nó phải trỏ tới thư mục chứa manifest.json, không phải thư mục cha và cũng không phải file .crx. Nếu content script không bao giờ chạy, hãy kiểm tra xem pattern matches của nó có bao phủ URL đó không; http://localhost/* không khớp với http://127.0.0.1:8080/.

Website có biết được một extension đang được cài không?

Đôi khi có. Một trang có thể nhận ra những thay đổi DOM do content script tạo ra, và có thể thử fetch các web-accessible resource mà extension khai báo. Điều này đúng với mọi trình duyệt có cài extension, và Clearcote không che giấu điều đó.

Tìm hiểu sâu hơn trong tài liệu

Tính năng liên quan

Dùng thử Clearcote

Thay thế drop-in cho Playwright & Puppeteer, nhất quán đến tận TLS handshake, với một bản build mã nguồn mở để bắt đầu.

Miễn phí cho một trình duyệt với GitHub. Không cần thẻ.