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óiCâ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
Chromium thay thế trực tiếp cho Playwright và Puppeteer: chỉ đổi một dòng import trong Python, Node hay .NET, trình duyệt được tự động tải về và xác minh SHA-256 cho bạn.
Bật tùy chọn là Clearcote tải Widevine CDM của Google theo đúng cách Chrome gốc làm, xác minh và bật nó, để video DRM phát được.
Chạy Clearcote như một CDP endpoint thường trực từ Docker image chính thức, serve() hoặc CLI, rồi kết nối bất kỳ framework nào mà không cần sửa code.
Canvas, WebGL, WebGPU, audio, font, màn hình và phần cứng được suy ra trong engine C++ từ một seed, với locale và múi giờ được đặt cho khớp, để mọi bề mặt đều nhất quán với nhau.
Bài đọc 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ẻ.