🎯 Trình duyệt đám mây tùy chỉnh, chống phát hiện được hỗ trợ bởi Chromium tự phát triển, thiết kế dành cho trình thu thập dữ liệu webtác nhân AI. 👉Dùng thử ngay
Quay lại blog

Tránh phát hiện Bot với Playwright Stealth: 9 Giải pháp cho năm 2026

Michael Lee
Michael Lee

Expert Network Defense Engineer

30-Jun-2026

Tóm tắt:

  • Playwright rò rỉ dấu vân tay. Các phiên bản Chromium chạy mà không có giao diện mặc định phát đi tín hiệu tự động hóa như navigator.webdriver, thiếu các plugin chuẩn và kích thước viewport có thể dự đoán.
  • Hệ sinh thái Python và Node.js khác nhau. Sử dụng playwright-stealth trong Python (với trình quản lý ngữ cảnh v2.x) và playwright-extra trong Node.js để vá những rò rỉ này.
  • Stealth cần nhiều lớp. Vượt qua phát hiện hiện đại đòi hỏi phải vá lớp JavaScript, ngẫu nhiên hóa các tiêu đề, xoay vòng proxy và quản lý cookie phiên đồng thời.
  • Trình duyệt Cloud xử lý phần còn lại. Khi các plugin stealth cục bộ không hiệu quả chống lại các WAF tiên tiến, việc chuyển giao việc thực thi trình duyệt cho cơ sở hạ tầng quản lý là con đường nâng cấp đáng tin cậy duy nhất.
  • Miễn phí để bắt đầu. Tài khoản mới tại Scrapeless bao gồm runtime Trình duyệt Scraping miễn phí — đăng ký tại app.scrapeless.com.

Giới thiệu: giới hạn của tự động hóa mặc định

Playwright là một công cụ tự động hóa trình duyệt mạnh mẽ, nhưng khi sử dụng mặc định, nó tự tuyên bố mình là một bot. Khi bạn khởi chạy một phiên bản Chromium không có giao diện, nó mang theo các dấu hiệu cụ thể—như cờ navigator.webdriver được đặt thành true, thiếu các plugin trình duyệt tiêu chuẩn và các chữ ký WebGL khác biệt. Các hệ thống phát hiện bot hiện đại từ Cloudflare, DataDome và Akamai đọc các tín hiệu này và chặn yêu cầu trước khi kịch bản của bạn có thể phân tích DOM.

Để thu thập dữ liệu từ các trang bị bảo vệ, bạn cần Playwright stealth. Tuy nhiên, "chế độ stealth" không phải là một công tắc tích hợp mà bạn có thể bật trong thư viện Playwright. Nó yêu cầu thực hiện các kỹ thuật cụ thể để vá các rò rỉ dấu vân tay của trình duyệt, quản lý các đặc điểm của mạng và mô phỏng hành vi của con người.

Hướng dẫn này phân tích 9 giải pháp thực tiễn để tránh phát hiện bot với Playwright vào năm 2025, cung cấp các ví dụ mã chi tiết để giúp bạn điều hướng qua những phức tạp của việc thu thập dữ liệu web hiện đại.


Những gì bạn có thể làm với nó

  • Bỏ qua phát hiện bot cơ bản. Truy cập các trang web chặn các trình duyệt không có giao diện mặc định bằng cách vá các rò rỉ navigator.webdriver và User-Agent.
  • Chuẩn hóa dấu vân tay của trình duyệt. Tiêm dữ liệu về phần cứng, bộ nhớ và plugin thực tế vào phiên bản Chromium không có giao diện của bạn.
  • Duy trì tính tồn tại của phiên. Kết hợp các bản vá stealth với quản lý cookie và ngữ cảnh phù hợp để giữ các phiên hoạt động lâu hơn.
  • Mở rộng việc trích xuất dữ liệu. Chạy các ngữ cảnh trình duyệt đã được vá stealth song song cho các nhiệm vụ thu thập dữ liệu lớn.

Tại sao nên sử dụng Scrapeless Scraping Browser

Scrapeless Scraping Browser là một trình duyệt đám mây tùy chỉnh, chống phát hiện, được thiết kế cho các công cụ thu thập dữ liệu web và các tác nhân AI. Khi các plugin stealth cục bộ gặp giới hạn chống lại các WAF tiên tiến, nó mang lại:

  • Antidetec tích hợp. Giả mạo dấu vân tay bản địa vượt ra ngoài các bản vá JavaScript, bao gồm quản lý dấu vân tay TLS và TCP.
  • Xoay vòng proxy tự động. Các proxy dân cư tích hợp tại hơn 195 quốc gia để giải quyết vấn đề danh tiếng IP.
  • Giải quyết thách thức được quản lý. Tự động giải quyết Cloudflare Turnstile, reCAPTCHA và hCaptcha.
  • Tương thích với Playwright. Kết nối các kịch bản Playwright hiện có của bạn với trình duyệt đám mây qua CDP chỉ với một dòng mã.

Nhận khóa API của bạn trong kế hoạch miễn phí tại app.scrapeless.com.


Điều kiện tiên quyết

  • Node.js 18+ hoặc Python 3.10+
  • Tài khoản và khóa API Scrapeless — đăng ký tại app.scrapeless.com
  • Sự quen thuộc cơ bản với tự động hóa Playwright

9 Giải pháp để Tránh Phát hiện Bot với Playwright Stealth

Một trong những chỉ báo phổ biến nhất của tự động hóa là thuộc tính navigator.webdriver, được đặt thành true trong môi trường trình duyệt tự động. Tiêu chuẩn W3C WebDriver xác định cờ này đặc biệt để cho phép các máy chủ xác định lưu lượng tự động. Các trang web có thể dễ dàng kiểm tra cờ này để xác định bot. Tắt nó là một kỹ thuật stealth cơ bản.

Các bước hoạt động mã:

Sử dụng page.add_init_script() để tiêm JavaScript sửa đổi thuộc tính navigator.webdriver trước khi bất kỳ kịch bản trang nào chạy:

python Copy
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    context = browser.new_context()
    
    # Tiêm JavaScript để tắt cờ webdriver
    context.add_init_script("""
        Object.defineProperty(navigator, 'webdriver', {
          get: () => undefined
        })
    """)
    
    page = context.new_page()
    page.goto("https://bot.sannysoft.com/")
    page.screenshot(path="webdriver_disabled.png")
    browser.close()

2. Ngẫu nhiên hóa chuỗi User-Agent

Tiêu đề User-Agent xác định trình duyệt và hệ điều hành cho máy chủ web. Việc sử dụng một User-Agent nhất quán hoặc lỗi thời (đặc biệt là một cái chứa HeadlessChrome) là một dấu hiệu mạnh mẽ cho thấy đó là bot. Việc ngẫu nhiên hóa các chuỗi User-Agent giúp xuất hiện như những người dùng hợp pháp khác nhau.

Các bước vận hành mã:

Duy trì danh sách các chuỗi User-Agent phổ biến và chọn một cái ngẫu nhiên cho mỗi phiên:

python Copy
from playwright.sync_api import sync_playwright
import random

user_agents = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/117.0"
]

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    context = browser.new_context(user_agent=random.choice(user_agents))
    page = context.new_page()
    page.goto("https://www.whatismybrowser.com/detect/what-is-my-user-agent")
    page.screenshot(path="random_user_agent.png")
    browser.close()

3. Sử dụng Proxy và Xoay chuyển Địa chỉ IP

Các yêu cầu lặp lại từ cùng một địa chỉ IP là dấu hiệu chính của hoạt động bot. Sử dụng một nhóm proxy và xoay chuyển địa chỉ IP cho mỗi yêu cầu hoặc phiên phân phối lưu lượng của bạn và tránh bị chặn dựa vào IP.

Các bước vận hành mã:

Cấu hình Playwright để sử dụng proxy:

python Copy
from playwright.sync_api import sync_playwright
import random

proxies = [
    "http://user1:pass1@proxy1.example.com:8080",
    "http://user2:pass2@proxy2.example.com:8080"
]

with sync_playwright() as p:
    # Khởi động trình duyệt với một proxy được chọn ngẫu nhiên
    browser = p.chromium.launch(headless=True, proxy={
        "server": random.choice(proxies)
    })
    page = browser.new_page()
    page.goto("https://www.whatismyip.com/")
    browser.close()

Đối với các hoạt động quy mô lớn, hãy xem xét việc sử dụng dịch vụ proxy quản lý như Scrapeless Proxies mà xử lý xoay vòng tự động.

4. Giả lập những chuyển động chuột và nhập liệu giống như con người

Bots thường tương tác với các thành phần web một cách trực tiếp và ngay lập tức, điều này là không tự nhiên. Các hệ thống chống bot theo dõi sinh trắc học hành vi như tốc độ con trỏ và nhịp độ gõ phím. Giả lập các chuyển động chuột, cú nhấp chuột và nhập liệu giống như con người giảm khả năng bị phát hiện.

Các bước vận hành mã:

Sử dụng các phương thức page.mousepage.keyboard để giới thiệu độ trễ và các con đường thực tế:

python Copy
from playwright.sync_api import sync_playwright
import time
import random

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    page = browser.new_page()
    page.goto("https://www.example.com")

    # Giả lập gõ phím giống như con người
    search_input = page.locator("#search-box")
    search_input.click()
    text_to_type = "Playwright Stealth"
    for char in text_to_type:
        page.keyboard.type(char)
        time.sleep(random.uniform(0.05, 0.2)) # Độ trễ ngẫu nhiên giữa các lần nhấn phím
    page.keyboard.press("Enter")
    
    browser.close()

5. Quản lý cookies và dữ liệu phiên

Các trang web sử dụng cookies để theo dõi phiên người dùng. Bots mà bỏ cookies giữa các yêu cầu dễ dàng bị xác định là lưu lượng tự động. Duy trì một phiên nhất quán bằng cách chấp nhận và gửi cookies là điều cần thiết cho sự lén lút.

Các bước vận hành mã:

Sử dụng context.storage_state() để lưu cookies và bộ nhớ cục bộ, sau đó tải chúng vào các phiên mới:

python Copy
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    
    # Kịch bản 1: Lưu cookies phiên hiện tại để sử dụng trong tương lai
    context = browser.new_context()
    page = context.new_page()
    page.goto("https://www.example.com/login")
    # Thực hiện đăng nhập...
    
    # Lưu trạng thái
    context.storage_state(path="state.json")
    browser.close()

    # Kịch bản 2: Tải cookies từ một phiên trước đó
    browser2 = p.chromium.launch(headless=True)
    context2 = browser2.new_context(storage_state="state.json")
    page2 = context2.new_page()
    page2.goto("https://www.example.com/dashboard")
    browser2.close()

6. Điều chỉnh kích thước viewport và giả lập thiết bị

Các trang web kiểm tra kích thước viewport và độ phân giải màn hình để phát hiện những bất thường. Sử dụng một viewport mặc định 800x600 là một dấu hiệu đỏ phổ biến. Giả lập các cấu hình thiết bị phổ biến giúp hòa nhập với lưu lượng người dùng thực.

Các bước vận hành mã:

Đặt viewportuser_agent khi tạo ngữ cảnh mới:

python Copy
from playwright.sync_api import sync_playwright
import random

viewports = [
    {"width": 1920, "height": 1080}, # Desktop

{"width": 1366, "height": 768}, # Laptop
]

với sync_playwright() như p:
trình duyệt = p.chromium.launch(headless=True)

Copy
viewport đã chọn = random.choice(viewports)
ngữ cảnh = trình duyệt.new_context(
    viewport=viewport đã chọn
)
trang = ngữ cảnh.new_page()
trang.goto("https://www.deviceinfo.me/")
trình duyệt.close()
Copy
### 7. Tránh Phát Hiện Chế Độ Headless

Trong khi chế độ headless rất hiệu quả, một số hệ thống chống bot có thể phát hiện điều đó bằng cách kiểm tra các khả năng hiển thị đồ họa bị thiếu. Chạy Playwright ở chế độ headful (với giao diện trình duyệt hiển thị) đôi khi có thể bỏ qua việc phát hiện, đặc biệt là đối với những hệ thống quyết liệt hơn.

**Các Bước Thao Tác Mã:**

Đặt `headless=False` khi khởi động trình duyệt:

```python
from playwright.sync_api import sync_playwright

với sync_playwright() như p:
    trình duyệt = p.chromium.launch(headless=False) # Khởi động ở chế độ headful
    trang = trình duyệt.new_page()
    trang.goto("https://www.example.com")
    trình duyệt.close()

8. Sử Dụng playwright-stealthplaywright-extra

Thay vì viết các tiêm JavaScript thủ công, hãy sử dụng các gói ẩn danh chuyên dụng. Hệ sinh thái Python sử dụng playwright-stealth, trong khi Node.js sử dụng playwright-extra kết hợp với puppeteer-extra-plugin-stealth. Những thư viện này tự động áp dụng một loạt các biện pháp tránh né để sửa chữa dấu vân tay trình duyệt.

Các Bước Thao Tác Mã (Python):

Cài đặt gói (pip install playwright-stealth) và sử dụng API quản lý ngữ cảnh v2.x:

python Copy
import asyncio
from playwright_stealth import Stealth
from playwright.async_api import async_playwright

async def main():
    # Trình quản lý ngữ cảnh tự động áp dụng các bản vá ẩn danh
    async với Stealth().use_async(async_playwright()) như playwright:
        trình duyệt = await playwright.chromium.launch(headless=True)
        ngữ cảnh = await trình duyệt.new_context()
        trang = await ngữ cảnh.new_page()
        
        await trang.goto("https://bot.sannysoft.com/")
        await trình duyệt.close()

asyncio.run(main())

9. Thực Hiện Các Khoảng Thời Gian Delay và Ngẫu Nhiên trong Các Hành Động

Bots thường thực hiện hành động với thời gian và tốc độ hoàn hảo. Giới thiệu các độ trễ ngẫu nhiên giữa các hành động và thay đổi tốc độ tương tác giúp kịch bản trông giống như con người hơn.

Các Bước Thao Tác Mã:

Sử dụng time.sleep() với các khoảng thời gian ngẫu nhiên:

python Copy
from playwright.sync_api import sync_playwright
import time
import random

với sync_playwright() như p:
    trình duyệt = p.chromium.launch(headless=True)
    trang = trình duyệt.new_page()
    trang.goto("https://www.example.com")

    # Giả lập duyệt web với các độ trễ ngẫu nhiên
    time.sleep(random.uniform(2, 5)) # Độ trễ tải trang ban đầu
    trang.click("a[href='/products']")
    
    trang.locator("input[name='q']").fill("sản phẩm tìm kiếm")
    time.sleep(random.uniform(0.5, 1.5)) # Độ trễ sau khi gõ
    trang.keyboard.press("Enter")
    
    trình duyệt.close()

Nhận khóa API của bạn trên kế hoạch miễn phí: app.scrapeless.com


Kết Luận: Vượt Qua Stealth Cơ Bản

Các plugin stealth của Playwright và các điều chỉnh hành vi là thiết yếu cho việc thu thập thông tin web cơ bản, nhưng chúng có giới hạn nhất định. Chúng hoạt động ở cấp độ JavaScript, có nghĩa là chúng không thể giả mạo dấu vân tay TLS, kích thước cửa sổ TCP, hoặc giải quyết các thách thức hành vi phức tạp như Cloudflare Turnstile.

Khi trình duyệt đã được vá ẩn danh của bạn bắt đầu nhận lỗi 403 hoặc các vòng lặp CAPTCHA, giải pháp không phải là viết thêm các biện pháp lách JavaScript. Giải pháp là chuyển giao việc thực thi trình duyệt cho một cơ sở hạ tầng được quản lý như Scrapeless Scraping Browser, cái xử lý quay vòng IP, giả mạo dấu vân tay TLS, và tự động giải quyết các thách thức trong khi cho phép bạn giữ mã Playwright của mình.


Sẵn Sàng Xây Dựng Hệ Thống Dữ Liệu Ai-Powered Của Bạn?

Tham gia cộng đồng các nhà phát triển xây dựng hệ thống trích xuất dữ liệu mạnh mẽ.


Câu Hỏi Thường Gặp

H: Playwright stealth có được tích hợp trong thư viện không?
Không. Playwright không có chế độ stealth bản địa. Bạn phải sử dụng các gói của bên thứ ba: playwright-stealth cho Python, hoặc playwright-extra với plugin stealth cho Node.js.

H: Các plugin stealth có vượt qua Cloudflare không?
Các plugin stealth sửa chữa các rò rỉ dấu vân tay trình duyệt cơ bản, điều này giúp chống lại các kiểm tra đơn giản. Tuy nhiên, chúng không giải quyết được các thách thức Cloudflare nâng cao (như Turnstile) hoặc khắc phục các vấn đề về danh tiếng IP.

H: Playwright stealth có hoạt động với Firefox hoặc WebKit không?
Không. Các mô-đun lẩn tránh trong cả gói stealth của Python và Node.js được thiết kế đặc biệt để vá các API của Chromium. Chúng không hỗ trợ Firefox hoặc WebKit.

Q: Tôi có cần proxy nếu sử dụng stealth không?
Có. Các plugin stealth chỉ che giấu danh tính của trình duyệt (dấu vân tay). Chúng không ẩn địa chỉ IP của bạn. Bạn vẫn cần proxy dân cư để tránh bị giới hạn tốc độ và các chặn dựa trên IP.

Q: Việc thu thập dữ liệu bằng Playwright có hợp pháp không?
Việc thu thập dữ liệu công khai nhìn thấy thường được cho phép, tuy nhiên các khu vực pháp lý khác nhau. Hãy xem xét Điều khoản Dịch vụ của trang web mục tiêu và tham khảo ý kiến cố vấn pháp lý về trường hợp sử dụng cụ thể của bạn.

Q: Liệu điều này có chạy mà không cần một tác nhân AI không?
Có, mã Playwright hoạt động từ đầu đến cuối như các script tự động hóa tiêu chuẩn. Không cần tác nhân AI để triển khai stealth trình duyệt.

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.

Bài viết phổ biến nhất

Danh mục