nodriver vs Patchright: Tự động hóa trình duyệt không phát hiện trong Python
Advanced Bot Mitigation Engineer
Tóm tắt:
- nodriver và Patchright là các công cụ tự động hóa không bị phát hiện ở cấp độ driver — chúng ẩn đi các tín hiệu đánh dấu một phiên làm việc là tự động, thay vì cung cấp một engine trình duyệt mới như Obscura hoặc Lightpanda.
- nodriver là người kế nhiệm của undetected-chromedriver: một framework Python async giao tiếp trực tiếp với Chrome DevTools Protocol, không cần Selenium và không có tệp nhị phân
chromedriver, vì vậy các dấu hiệu webdriver cổ điển đã biến mất theo thiết kế. Nó được cấp phép AGPL-3.0 và vượt quá 4,000 sao trên GitHub. - Patchright là một giải pháp thay thế cho Playwright Python đã vá các lỗ hổng mà bề mặt tự động hóa của Playwright tiết lộ — cùng API,
from patchright.sync_api import sync_playwright, được cấp phép Apache-2.0. - Cả hai đều báo cáo
navigator.webdriverlàfalsengay khi khởi động — đã được xác minh trực tiếp bên dưới trên từng cái — đây là tín hiệu đầu tiên mà hầu hết các công cụ phát hiện bot đọc. - Không cái nào cung cấp địa chỉ IP hoặc giải quyết các trang thách thức. Phương pháp ẩn danh cấp độ driver ẩn giấu tự động hóa; nó không làm gì cho danh tiếng IP hoặc tường validation lưu lượng. Scrapeless Scraping Browser thêm proxy dân cư ở hơn 195 quốc gia và xử lý thách thức vào cùng một phiên.
- Miễn phí để bắt đầu. Tài khoản Scrapeless mới bao gồm thời gian chạy Scraping Browser miễn phí — đăng ký tại app.scrapeless.com.
Giới thiệu: hai cách để trông không bị phát hiện, một điều chúng không làm
Các hệ thống chống bot phát hiện tự động hóa ở hai nơi chính: trình duyệt (các bề mặt fingerprint như WebGL và fonts) và driver (cơ chế điều khiển trình duyệt — thuộc tính navigator.webdriver từ chỉ dẫn W3C WebDriver, các tác phẩm Chrome DevTools Protocol, điều khiển tự động hóa mà các công cụ tiêu chuẩn tiết lộ). Các công cụ cấp độ engine như một phiên bản Firefox đã được vá lại tác động đến thứ nhất. nodriver và Patchright tấn công vào thứ hai: chúng giữ lại một phiên bản Chromium bình thường nhưng loại bỏ các dấu hiệu mà một stack tự động hóa bình thường để lại.
Chúng tiếp cận từ hai hướng ngược lại. nodriver hoàn toàn loại bỏ Selenium và điều khiển Chrome thông qua DevTools Protocol từ Python async. Patchright giữ Playwright nguyên vẹn và vá các lỗ hổng ở dưới nó, vì vậy mã Playwright hiện tại vẫn chạy không thay đổi. Hướng dẫn này cài đặt cả hai, thực hiện cùng một tác vụ trên mỗi cái, chỉ ra giới hạn chung mà không cái nào giải quyết được, và giải thích cách một trình duyệt đám mây quản lý lấp đầy khoảng trống đó.
Những công cụ này là gì — và "cấp độ driver" có nghĩa là gì
Phương pháp ẩn danh cấp độ driver liên quan đến cách mà trình duyệt được điều khiển, không phải trình duyệt là gì. Một phiên làm việc tiêu chuẩn Selenium hoặc Playwright rò rỉ bản chất của nó thông qua các artefacts kênh điều khiển: thuộc tính navigator.webdriver được đặt thành true, các hook thời gian chạy CDP, một tiện ích mở rộng tự động hóa. Các công cụ phát hiện tìm kiếm chính xác những thứ này. nodriver và Patchright loại bỏ chúng trong khi vẫn giữ bạn trên Chromium thông thường.
nodriver là người kế nhiệm được duy trì cho undetected-chromedriver được sử dụng rộng rãi. Nó là một framework Python lấy async làm trung tâm, giao tiếp trực tiếp với CDP — không có tệp thực thi chromedriver, không có lớp webdriver của Selenium, vì vậy không có tệp nhị phân webdriver nào để định danh ngay từ đầu. Mô tả của nó đặt nó là một framework nhanh cho tự động hóa và thu thập thông tin vượt qua các hệ thống như Cloudflare và hCaptcha, và nó được cấp phép AGPL-3.0.
Patchright lựa chọn con đường tương thích: nó là một sự triển khai không bị phát hiện lại của gói Playwright Python mà vá các lỗ hổng phát hiện trong bề mặt tự động hóa của Playwright. Bạn cài đặt nó thay cho Playwright và chỉ cần thay đổi một import; mọi thứ khác — bộ chọn, ngữ cảnh, evaluate — vẫn là Playwright mà bạn đã viết. Nó được cấp phép Apache-2.0, một giấy phép dễ dãi hơn so với copyleft của nodriver, điều này có thể quan trọng khi bạn nhúng nó vào một sản phẩm thương mại.
Cài đặt cả hai
nodriver cài đặt từ PyPI và đưa ra cách xử lý Chrome riêng; Patchright cài đặt giống như Playwright và tải xuống một bản build Chromium:
bash
# nodriver — framework CDP async, người kế nhiệm của undetected-chromedriver
pip install nodriver
# Patchright — Playwright không bị phát hiện, cộng với bản build Chromium của nó
pip install patchright
patchright install chromium
nodriver: CDP async, không có lớp webdriver
API của nodriver là async và gốc CDP. Điều này khởi động Chrome, điều hướng, và lấy lại cờ tự động hóa:
python
import nodriver as uc
async def main():
browser = await uc.start(headless=True)
page = await browser.get("https://example.com")
await page.sleep(1)
print("TIÊU ĐỀ:", await page.evaluate("document.title"))
print("WEBDRIVER:", await page.evaluate("navigator.webdriver"))
browser.stop()
nodriver thực hiện các trợ lý vòng lặp của riêng mình để việc dọn dẹp giữ sạch sẽ
uc.loop().run_until_complete(main())
Điều này in ra `TIÊU ĐỀ: Miền Ví dụ` và `WEBDRIVER: Sai`. Không có tiến trình `chromedriver` và không có Selenium trong ngăn xếp — kênh điều khiển là CDP thô, vì vậy tín hiệu webdriver không có thay vì bị vá lại. Việc sử dụng `uc.loop()` thay vì `asyncio.run` thuần túy giữ cho việc dọn dẹp vòng lặp sự kiện của nodriver sạch sẽ.
## Patchright: Playwright giống hệt, trừ các lỗ hổng
Nếu bạn đã có mã Playwright, Patchright là một chuyển đổi một dòng — chỉ thay đổi lệnh import và không có gì khác:
```python
# Thay đổi duy nhất từ Playwright: nhập từ patchright, không phải playwright
from patchright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
page.goto("https://example.com")
print("TIÊU ĐỀ:", page.title())
print("WEBDRIVER:", page.evaluate("navigator.webdriver"))
browser.close()
Điều này cũng in ra WEBDRIVER: Sai. Vì API giống hệt với Playwright, một trình thu thập thông tin Playwright hiện tại có thể áp dụng tính năng che giấu của Patchright bằng cách thay thế lệnh import — không cần viết lại, không cần mô hình tư duy mới.
Nhận khóa API của bạn trên kế hoạch miễn phí: app.scrapeless.com
Cái nào — và khoảng trống cả hai để lại
Lựa chọn giữa chúng phụ thuộc vào điểm khởi đầu của bạn. Nếu bạn đang viết mã Python bất đồng bộ mới và muốn con đường CDP trực tiếp mỏng nhất mà không có di sản Selenium, nodriver là lựa chọn phù hợp — lưu ý các điều khoản copyleft AGPL-3.0 của nó trước khi nhúng vào thương mại. Nếu bạn có mã Playwright hoặc một nhóm thành thạo trong API Playwright, Patchright mang đến cho bạn bề mặt tương tự với các lỗ hổng đã được vá và giấy phép Apache-2.0 dễ dàng. Cả hai đều giữ bạn trên Chromium thông thường; không ai yêu cầu bạn học một công cụ mới.
Khoảng trống mà chúng chia sẻ là phần quan trọng. Sự che giấu ở cấp độ driver ẩn đi rằng một phiên đang được tự động hóa. Nó không thay đổi nguồn gốc của phiên và không trả lời một trang thách thức. Ba chế độ thất bại nằm hoàn toàn ngoài những gì các công cụ này giải quyết:
- Danh tiếng IP. Các yêu cầu của bạn xuất phát từ IP của máy bạn. Một mục tiêu chặn các dải trung tâm dữ liệu hoặc giới hạn tỷ lệ địa chỉ của bạn sẽ chặn một phiên không có webdriver sạch sẽ nhanh như một phiên đơn giản.
- Trang thách thức. Một trang xác thực lưu lượng vẫn cần được giải quyết. Nhìn không tự động giảm tần suất xuất hiện; nó không xóa bỏ những cái đã xuất hiện.
- Độ sâu dấu vân tay. Những công cụ này tập trung vào kênh điều khiển, không phải bề mặt dấu vân tay cấp động cơ đầy đủ mà một trình duyệt chống phát hiện chuyên dụng viết lại.
Cả ba đều là vấn đề về mạng và hạ tầng, và không có thư viện ở cấp độ driver nào giải quyết được chúng vì chúng không phải là vấn đề ở cấp độ driver.
Nơi Scrapeless Scraping Browser phù hợp
Khi mục tiêu dựa trên danh tiếng IP hoặc phục vụ các thách thức — không chỉ trên cờ webdriver — các phần còn thiếu là egress cư trú và xử lý thách thức. Scrapeless Scraping Browser cung cấp cả hai trong một phiên quản lý: một trình duyệt chống phát hiện đám mây được phát triển bởi Chromium tự phát triển, với các proxy cư trú ở hơn 195 quốc gia được chọn theo từng phiên, được công khai như một điểm cuối CDP. Vì Patchright là Playwright, kết nối với nó giống như gọi connect_over_cdp mà Playwright đã sử dụng:
python
import os
from playwright.sync_api import sync_playwright
# Cloud Chromium với egress cư trú — cấp độ IP + thách thức
API_KEY = os.environ["SCRAPELESS_API_KEY"]
ws_endpoint = (
"wss://browser.scrapeless.com/api/v2/browser"
f"?token={API_KEY}&session_ttl=180&proxy_country=US"
)
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(ws_endpoint)
page = browser.contexts[0].new_page() if browser.contexts else browser.new_page()
page.goto("https://example.com", wait_until="domcontentloaded")
print("TIÊU ĐỀ:", page.title())
browser.close()
Mô hình thực tiễn là dạng phân tầng: nodriver hoặc Patchright cho các phiên tự lưu trữ chạy chống lại các mục tiêu chỉ kiểm tra driver, và một phiên Scrapeless cho các mục tiêu cũng xem xét IP và đưa ra thách thức. Tài liệu Scrapeless có tài liệu tham khảo đầy đủ về tham số, và giá cả được tính theo mức sử dụng với một mức miễn phí. Đối với nửa trang thách thức cụ thể, hướng dẫn trên giải quyết Cloudflare với Python cho thấy phiên quản lý giải quyết những gì một ngăn xếp chỉ có driver không làm được.
Kết luận: ẩn dấu driver, sau đó giải quyết mạng
nodriver và Patchright là hai giải pháp mạnh nhất ở cấp độ driver để phát hiện tự động hóa — nodriver bằng cách loại bỏ Selenium để sử dụng trực tiếp CDP, Patchright bằng cách vá Playwright ngay tại chỗ — và cả hai đều xóa cờ webdriver mà mọi bộ phát hiện kiểm tra trước tiên. Hãy chọn theo mã nguồn và nhu cầu cấp phép của bạn, và rõ ràng về ranh giới: chúng ẩn giấu tự động hóa, không phải cơ sở hạ tầng.
Đối với những mục tiêu cũng đánh giá uy tín IP và đưa ra thử thách, hãy giữ một phiên Scrapeless Scraping Browser trong vòng quay. Mọi thứ ở đây đều nói về CDP hoặc Playwright, vì vậy việc định tuyến một yêu cầu từ một phiên chạy ẩn tự lưu trữ đến một phiên quản lý trên đám mây chỉ là thay đổi chuỗi kết nối, không phải viết lại.
Sẵn Sàng Xây Dựng Đường Dẫn Dữ Liệu AI Của Bạn?
Tham gia cộng đồng của chúng tôi để nhận một gói miễn phí và kết nối với các nhà phát triển xây dựng các đường dẫn tự động hóa không bị phát hiện: Discord · Telegram.
Đăng ký tại app.scrapeless.com để có thời gian chạy Scraping Browser miễn phí và định tuyến các mục tiêu IP và thử thách của bạn qua nó trong khi nodriver hoặc Patchright xử lý các mục chỉ có driver.
Câu Hỏi Thường Gặp
Q: Sự khác biệt giữa nodriver và Patchright là gì?
nodriver là một framework async mà điều khiển Chrome trực tiếp qua CDP mà không cần Selenium hay chromedriver, và là người kế thừa của undetected-chromedriver. Patchright là một sự thay thế trực tiếp cho gói Playwright Python, vá các lỗ hổng phát hiện của Playwright trong khi giữ nguyên API của Playwright. Chọn nodriver cho một stack CDP-native mới, Patchright để thêm tính năng ẩn vào mã Playwright hiện có.
Q: nodriver và Patchright có ẩn navigator.webdriver không?
Có — cả hai báo cáo navigator.webdriver là false theo mặc định, được xác thực trực tiếp trong hướng dẫn này. nodriver loại bỏ tín hiệu webdriver bằng cách không sử dụng lớp webdriver; Patchright vá nó ra khỏi bề mặt của Playwright.
Q: Những trình duyệt chống phát hiện này có giống như Camoufox không?
Không. Camoufox là một trình duyệt chống phát hiện ở cấp độ engine mà viết lại bề mặt dấu vân tay bên trong Firefox. nodriver và Patchright là ở cấp độ driver: chúng chạy Chromium thông thường và ẩn kênh điều khiển tự động hóa. Hai cách tiếp cận giải quyết các lớp phát hiện khác nhau và có thể bổ sung cho nhau.
Q: Tôi nên kiểm tra giấy phép nào trước khi sử dụng chúng một cách thương mại?
nodriver là AGPL-3.0 (có quyền tự do, với nghĩa vụ sử dụng mạng); Patchright là Apache-2.0 (có tính cho phép). Nếu các điều khoản cấp phép hạn chế sản phẩm của bạn, Patchright là lựa chọn cho phép hơn trong hai cái — nhưng hãy xem xét cả hai theo yêu cầu của bạn.
Q: Tại sao lại thêm Scrapeless nếu phiên của tôi đã trông không tự động?
Bởi vì trông không tự động chỉ đánh lừa các kiểm tra ở cấp độ driver. Các mục tiêu khó cũng đánh giá uy tín IP và phục vụ các trang thử thách, và không có thư viện cấp độ driver nào di chuyển IP của bạn hoặc giải quyết thử thách. Scrapeless Scraping Browser gói các proxy dân cư ở hơn 195 quốc gia và xử lý thử thách vào một phiên CDP quản lý, bao phủ lớp mà những công cụ này không làm được.
Tại Scrapless, chúng tôi chỉ truy cập dữ liệu có sẵn công khai trong khi tuân thủ nghiêm ngặt các luật, quy định và chính sách bảo mật trang web hiện hành. Nội dung trong blog này chỉ nhằm mục đích trình diễn và không liên quan đến bất kỳ hoạt động bất hợp pháp hoặc vi phạm nào. Chúng tôi không đảm bảo và từ chối mọi trách nhiệm đối với việc sử dụng thông tin từ blog này hoặc các liên kết của bên thứ ba. Trước khi tham gia vào bất kỳ hoạt động cạo nào, hãy tham khảo ý kiến cố vấn pháp lý của bạn và xem xét các điều khoản dịch vụ của trang web mục tiêu hoặc có được các quyền cần thiết.



