Home/ Blog/Headless browser detection: website nhận ra bot thế nào?

Headless browser detection: website nhận ra bot thế nào?

logo Hidemyacc circle

Bạn đã thay đổi proxy, thiết lập fingerprint riêng cho từng profile nhưng vẫn gặp checkpoint hoặc bị website hạn chế truy cập? Điều này cho thấy việc quản lý môi trường trình duyệt không đơn giản chỉ là thay đổi một vài thông số. Đằng sau mỗi lượt truy cập, website có thể phân tích nhiều dữ liệu khác nhau để đánh giá người dùng có phải bot hay không.

Vậy các kỹ thuật phát hiện bot hoạt động như thế nào, và liệu antidetect browser có thể bị nhận diện? Bài viết sẽ giúp bạn hiểu rõ những cơ chế này cùng các yếu tố ảnh hưởng đến khả năng nhận diện của website.

1. Headless browser là gì và khác gì trình duyệt thông thường?

Headless browser là trình duyệt chạy không có cửa sổ giao diện và thường được điều khiển bằng code thông qua Puppeteer, Playwright hoặc Selenium. Headless browser vẫn tải trang, chạy JavaScript và gửi request như trình duyệt thông thường. Vì vậy, website cần dựa vào những khác biệt trong môi trường và cách trình duyệt hoạt động để nhận diện lưu lượng tự động.

1.1. Headless, headful và automation khác nhau thế nào?

Để hiểu cách website nhận diện headless browser, trước tiên bạn cần phân biệt hai khái niệm: chế độ hiển thị và phương thức điều khiển trình duyệt. Headless mô tả việc trình duyệt có hiển thị cửa sổ hay không, còn automation đề cập đến việc trình duyệt được điều khiển bằng script.

Có thể phân biệt ba trường hợp phổ biến như sau:

Loại trình duyệt Có cửa sổ giao diện? Có bị điều khiển bằng script?
Chrome thông thường Có Không nhất thiết
Headless Chrome Không Thường có
Chrome headful + Puppeteer Có Có

Điểm quan trọng là headless không đồng nghĩa với automation. Một trình duyệt có giao diện vẫn có thể được điều khiển tự động bằng Puppeteer hoặc Playwright. Ngược lại, việc không hiển thị cửa sổ không tự động chứng minh trình duyệt đang thực hiện hành vi bot.

Chẳng hạn, khi bạn chạy Puppeteer với chế độ headful, Chrome vẫn mở cửa sổ như bình thường nhưng các thao tác có thể được thực hiện thông qua script. Vì vậy, website không chỉ kiểm tra trình duyệt có giao diện hay không mà còn có thể xem xét những dấu hiệu liên quan đến phương thức điều khiển.

headless browser detection
Cách headless browser hoạt động

1.2. Headless Chrome mới và chrome-headless-shell khác nhau ra sao?

Headless Chrome đã có một số thay đổi quan trọng qua các phiên bản. Trước đây, chế độ headless sử dụng một bản triển khai riêng, không chia sẻ toàn bộ mã nguồn với Chrome có giao diện. Điều này khiến môi trường headless có một số đặc điểm khác biệt và dễ được các công cụ phát hiện bot đưa vào danh sách kiểm tra.

Hiện nay, Chrome đã hợp nhất chế độ headless mới với chế độ headful. Cụ thể, từ Chrome 112, headless sử dụng cùng mã nguồn trình duyệt Chrome thông thường nhưng không tạo cửa sổ hiển thị. Đến Chrome 132, chế độ headless cũ được chuyển sang một tệp thực thi riêng có tên chrome-headless-shell, được phân phối thông qua Chrome for Testing.

Khi sử dụng Puppeteer, bạn có thể gặp hai tùy chọn:

  • headless: true: Chạy Chrome ở chế độ headless mới.
  • headless: 'shell': Chạy phiên bản chrome-headless-shell theo chế độ headless cũ.

Sự khác biệt này rất đáng lưu ý khi bạn tìm hiểu các phương pháp headless browser detection. Một số bài hướng dẫn được viết từ thời headless cũ có thể dựa trên những đặc điểm không còn phản ánh chính xác phiên bản Chrome hiện tại. Vì vậy, khi đọc kết quả kiểm tra hoặc tài liệu kỹ thuật, bạn nên đối chiếu phiên bản Chrome và cấu hình đang sử dụng.

Website phát hiện headless browser chủ yếu để phân biệt người dùng thật với lưu lượng tự động, chẳng hạn như thu thập dữ liệu hàng loạt, thử đăng nhập bằng nhiều mật khẩu hoặc tạo lượt nhấp quảng cáo giả. Tuy nhiên, kết quả phát hiện không phải lúc nào cũng dẫn đến việc chặn truy cập ngay lập tức. Một hệ thống chống bot có thể đánh giá thêm các tín hiệu khác rồi yêu cầu xác minh CAPTCHA hoặc áp dụng biện pháp hạn chế phù hợp.

2. Website phát hiện headless browser qua những tín hiệu nào?

Website phát hiện headless browser bằng cách kết hợp nhiều nhóm tín hiệu, thay vì chỉ dựa vào một đặc điểm riêng lẻ. Các dữ liệu được kiểm tra có thể đến từ header HTTP, thuộc tính JavaScript, giao thức điều khiển trình duyệt, môi trường thiết bị, hành vi tương tác và kết nối mạng.

Mỗi nhóm tín hiệu cho biết một khía cạnh khác nhau. Chẳng hạn, User-Agent cung cấp thông tin về trình duyệt được khai báo, trong khi navigator.webdriver cho biết trình duyệt có đang được điều khiển tự động hay không. Khi nhiều thông tin không khớp với nhau, website có thêm cơ sở để đánh giá lượt truy cập có dấu hiệu bất thường.

2.1. Tín hiệu ở tầng HTTP

Ngay từ khi bạn truy cập một trang web, trình duyệt đã gửi các HTTP header để máy chủ biết một số thông tin về thiết bị và môi trường truy cập. Website có thể phân tích những dữ liệu này trước khi kiểm tra sâu hơn bằng JavaScript.

Một số tín hiệu thường được xem xét gồm:

  • User-Agent chứa HeadlessChrome: Một số cấu hình Headless Chrome có thể gửi chuỗi HeadlessChrome trong User-Agent. Website có thể đọc giá trị này trực tiếp từ request ở phía máy chủ hoặc thông qua thuộc tính navigator.userAgent ở phía trình duyệt. Tuy nhiên, đây không phải giá trị xuất hiện trong mọi cấu hình headless, nên không thể dùng riêng dấu hiệu này để kết luận.
  • Client Hints không khớp với User-Agent: Client Hints cung cấp thêm thông tin về thương hiệu trình duyệt, phiên bản, hệ điều hành và thiết bị thông qua các header như Sec-CH-UA và Sec-CH-UA-Platform. Nếu User-Agent khai báo một phiên bản Chrome nhưng Client Hints lại cung cấp thông tin không tương ứng, website có thể ghi nhận sự thiếu nhất quán này.
  • Header thiếu hoặc có giá trị bất thường: Các header như Accept-Language cho biết ngôn ngữ trình duyệt ưu tiên. Nếu thông tin này thiếu hoặc không phù hợp với những dữ liệu khác, hệ thống có thể xem đó là một dấu hiệu cần kiểm tra thêm.

Điều bạn cần lưu ý là HTTP header có thể thay đổi tùy trình duyệt, phiên bản và cấu hình. Vì vậy, website thường cần đối chiếu chúng với các tín hiệu khác thay vì xem một giá trị riêng lẻ là bằng chứng chắc chắn. Chrome cũng cung cấp cơ chế User-Agent Client Hints để truyền thông tin trình duyệt theo cách có cấu trúc hơn.

2.2. Tín hiệu từ thuộc tính JavaScript

Sau khi trang web tải xong, JavaScript có thể truy cập nhiều thuộc tính của trình duyệt để kiểm tra môi trường đang thực thi. Đây là một trong những cách phổ biến để hệ thống chống bot tìm kiếm dấu hiệu automation.

Các thuộc tính đáng chú ý gồm:

  • navigator.webdriver: Đây là thuộc tính cho biết trình duyệt có đang được điều khiển bằng automation theo cơ chế WebDriver hay không. Theo tiêu chuẩn W3C, giá trị này trả về true khi cờ WebDriver đang hoạt động. Với Chrome, thuộc tính có thể trả về true khi trình duyệt được khởi chạy bằng một số cờ như --enable-automation, --headless hoặc --remote-debugging-port với cổng 0. Bạn cần phân biệt rằng navigator.webdriver liên quan đến trạng thái điều khiển trình duyệt, không chỉ riêng chế độ headless.

    W3C+1
  • WebGL renderer: WebGL cho phép website truy cập thông tin liên quan đến khả năng xử lý đồ họa của thiết bị. Trong một số môi trường không có GPU phù hợp, trình duyệt có thể sử dụng bộ kết xuất đồ họa phần mềm như SwiftShader. Nếu thông tin này không tương ứng với hệ điều hành hoặc cấu hình thiết bị được khai báo, website có thể ghi nhận sự khác biệt.
  • Kích thước màn hình và cửa sổ: Các giá trị như screen.width, screen.height, window.innerWidth và window.outerWidth cung cấp thông tin về không gian hiển thị. Một số cấu hình tự động hóa có thể tạo ra kích thước mặc định hoặc thiếu sự nhất quán giữa các thuộc tính này.

Bạn có thể kiểm tra một số thông tin cơ bản bằng cách mở Developer Tools trên trình duyệt và nhập các lệnh JavaScript tương ứng vào Console. Tuy nhiên, kết quả kiểm tra chỉ phản ánh môi trường tại thời điểm đó, không cho biết chắc chắn website khác sẽ đánh giá trình duyệt như thế nào.

Có thể sử dụng đoạn code sau để xem nhanh một số thuộc tính:

JavaScript
console.log("WebDriver:", navigator.webdriver);

console.log("Screen size:", screen.width, "x", screen.height);

console.log("Window size:", window.innerWidth, "x", window.innerHeight);

const canvas = document.createElement("canvas");
const gl = canvas.getContext("webgl");

if (gl) {
  const debugInfo = gl.getExtension("WEBGL_debug_renderer_info");

  console.log(
    "WebGL renderer:",
    debugInfo
      ? gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL)
      : "Renderer information unavailable"
  );
}

2.3. Dấu vết của Chrome DevTools Protocol

Ngoài những thuộc tính có thể đọc trực tiếp bằng JavaScript, website còn có thể tìm kiếm dấu hiệu phát sinh khi một công cụ bên ngoài điều khiển trình duyệt. Một cơ chế liên quan đến việc này là Chrome DevTools Protocol (CDP).

CDP là giao thức cho phép các công cụ bên ngoài giao tiếp và điều khiển Chrome. Đây cũng là giao thức được Chrome DevTools sử dụng, đồng thời hỗ trợ các công cụ tự động hóa như Puppeteer và Playwright trong quá trình điều khiển trình duyệt.

Khi kết nối với Chrome, công cụ tự động hóa có thể gửi các lệnh CDP để kích hoạt những chức năng cần thiết. Chẳng hạn, Runtime.enable cho phép công cụ nhận các sự kiện liên quan đến môi trường JavaScript. Một số thao tác thông qua CDP có thể làm thay đổi cách trình duyệt xử lý hoặc hiển thị thông tin trong Console, từ đó tạo ra dấu hiệu mà website có thể kiểm tra.

Nếu những dấu hiệu này khác với hành vi thường thấy của trình duyệt thông thường, hệ thống chống bot có thể xem đó là một tín hiệu cho thấy trình duyệt đang được tự động hóa. Tuy nhiên, dấu vết CDP không phải lúc nào cũng đồng nghĩa với bot. Người dùng mở Chrome DevTools để kiểm tra website cũng có thể tạo ra một số hiệu ứng tương tự. Vì vậy, hệ thống cần kết hợp thêm các tín hiệu khác trước khi đưa ra đánh giá.

Ngoài ra, kỹ thuật phát hiện dựa trên CDP và Console có thể thay đổi theo phiên bản trình duyệt. Một số phương pháp từng được sử dụng rộng rãi đã được điều chỉnh hoặc khắc phục. Do đó, bạn không nên dựa vào một đoạn kiểm tra cũ để kết luận trình duyệt hiện tại có đang bị tự động hóa hay không.

2.4. Dấu hiệu môi trường đã bị chỉnh sửa

Một trình duyệt có thể cung cấp nhiều thông tin khác nhau về hệ điều hành, thiết bị và khả năng phần cứng. Nếu một vài thuộc tính được thay đổi nhưng những dữ liệu liên quan vẫn giữ nguyên, website có thể nhận ra sự thiếu nhất quán.

Có hai nhóm dấu hiệu đáng chú ý:

  • Thuộc tính bị ghi đè không giống bản gốc: Một số script có thể thay đổi giá trị của các thuộc tính như navigator.webdriver hoặc thông tin trình duyệt khác. Tuy nhiên, cách chỉnh sửa không phù hợp có thể làm thay đổi cả getter, prototype hoặc cách thuộc tính được truy cập. Website có thể kiểm tra những đặc điểm này để nhận ra dữ liệu đã bị can thiệp.
  • Thông tin thiết bị mâu thuẫn với nhau: Ví dụ, User-Agent khai báo Windows nhưng một số thông tin về nền tảng, font hoặc WebGL lại không tương ứng. Tương tự, múi giờ và vị trí IP có thể tạo ra một tổ hợp thiếu hợp lý nếu không xét đến bối cảnh sử dụng.

Những dữ liệu này thường được xem xét trong quá trình phân tích browser fingerprint. Bạn có thể tìm hiểu thêm về cơ chế thu thập và đối chiếu thông tin thiết bị trong bài viết về browser fingerprint.

2.5. Tín hiệu hành vi tương tác

Không phải mọi phương pháp phát hiện bot đều tập trung vào thông số kỹ thuật của trình duyệt. Website còn có thể phân tích cách người dùng tương tác với trang, chẳng hạn như di chuyển chuột, cuộn trang, nhập liệu và thời gian giữa các thao tác.

Một số hành vi có thể khiến hệ thống chú ý gồm:

  • Chuột di chuyển theo đường thẳng quá đều hoặc lặp lại cùng một quỹ đạo.
  • Biểu mẫu được điền và gửi gần như ngay lập tức sau khi trang tải xong.
  • Người truy cập thực hiện nhiều thao tác liên tiếp với khoảng thời gian giống hệt nhau.
  • Trang được cuộn hoặc nhấp vào các vị trí theo một trình tự lặp lại trong nhiều lượt truy cập.

Tuy nhiên, không nên mặc định người dùng thao tác nhanh hoặc không di chuyển chuột là bot. Người dùng thật có thể sử dụng phím tắt, công cụ hỗ trợ hoặc thao tác trực tiếp với những phần cần thiết trên trang. Vì vậy, tín hiệu hành vi cần được đánh giá dựa trên ngữ cảnh và sự kết hợp của nhiều hoạt động khác.

2.6. Tín hiệu mạng

Bên cạnh trình duyệt và hành vi tương tác, thông tin mạng cũng góp phần giúp website đánh giá nguồn truy cập. Một số hệ thống chống bot kiểm tra danh tiếng IP, loại mạng và đặc điểm kết nối để xác định liệu lượt truy cập có bất thường hay không.

Hai nhóm dữ liệu thường được quan tâm là:

  • IP reputation: Website có thể đánh giá lịch sử và danh tiếng của địa chỉ IP. Chẳng hạn, một IP từng xuất hiện trong nhiều hoạt động đăng nhập bất thường hoặc gửi lượng request lớn có thể bị xếp vào nhóm rủi ro cao. IP datacenter cũng có thể được xem xét khác với IP dân dụng, tùy chính sách của từng nền tảng.
  • TLS fingerprint: TLS fingerprint phản ánh một số đặc điểm trong quá trình thiết lập kết nối mã hóa. Nếu thông tin này không tương ứng với trình duyệt hoặc môi trường được khai báo, hệ thống có thể ghi nhận sự thiếu nhất quán.

Các tín hiệu mạng không cho biết trực tiếp trình duyệt có đang chạy ở chế độ headless hay không. Thay vào đó, chúng cung cấp thêm thông tin về địa chỉ IP, đặc điểm kết nối và độ uy tín của nguồn truy cập, giúp website đánh giá liệu một lượt truy cập có dấu hiệu bất thường hay không.

Bảng tổng hợp nhanh

Mỗi nhóm tín hiệu cung cấp một loại thông tin khác nhau. Bảng dưới đây giúp bạn hình dung website có thể kiểm tra những gì và khả năng xuất hiện nhận diện nhầm trong từng trường hợp.

Nhóm tín hiệu Tầng Website kiểm tra điều gì Khả năng nhận nhầm người thật
User-Agent và Client Hints HTTP + JS Chuỗi HeadlessChrome, brand hoặc phiên bản không khớp Cần đánh giá theo cấu hình
navigator.webdriver JS Trình duyệt có đang bị điều khiển không Thấp
Dấu vết CDP JS Hiệu ứng phụ khi lệnh Runtime.enable bật Có, ví dụ người mở DevTools
WebGL renderer, kích thước màn hình JS Renderer phần mềm, cửa sổ mặc định Trung bình, ví dụ máy ảo hoặc máy không GPU
Môi trường bị chỉnh sửa JS Getter không phải native, thông tin mâu thuẫn Thấp
Hành vi tương tác Hành vi Nhịp độ và quỹ đạo thao tác Trung bình
IP và TLS Mạng Danh tiếng IP, TLS fingerprint Trung bình

Website thường không dựa vào một tín hiệu riêng lẻ để đánh giá lượt truy cập mà kết hợp nhiều dữ liệu từ trình duyệt, hành vi tương tác và kết nối mạng. Một dấu hiệu bất thường chưa đủ để kết luận người dùng đang sử dụng headless browser, nhưng khi nhiều tín hiệu cùng xuất hiện, hệ thống có thể đánh giá lượt truy cập đó có rủi ro cao hơn.

2.7. Những mẹo phát hiện headless cũ nào cần kiểm tra lại?

Khi tìm hiểu headless browser detection, bạn có thể bắt gặp nhiều bài hướng dẫn liệt kê các thuộc tính như navigator.plugins, navigator.languages, window.chrome và WebRTC để nhận diện trình duyệt headless. Đây là những dấu hiệu thường xuất hiện trong các tài liệu về headless Chrome đời cũ.

Tuy nhiên, Chrome đã thay đổi cách triển khai chế độ headless từ phiên bản 112. Chế độ headless mới sử dụng chung mã nguồn với Chrome có giao diện, trong khi phiên bản cũ được tách thành chrome-headless-shell từ Chrome 132. Do đó, những đặc điểm từng được xem là dấu hiệu phổ biến không nhất thiết còn phản ánh chính xác môi trường headless hiện tại.

Bạn nên xem các thuộc tính dưới đây là những điểm cần kiểm tra theo phiên bản, thay vì bằng chứng chắc chắn cho thấy trình duyệt đang chạy headless.

Mẹo hay gặp Thường được gắn với Cách tự kiểm tra
navigator.plugins rỗng Headless cũ theo các bài viết cũ Chạy navigator.plugins.length trong console trên cấu hình đang dùng
navigator.languages rỗng Headless cũ theo các bài viết cũ Kiểm tra navigator.languages
Thiếu window.chrome Headless cũ theo các bài viết cũ Kiểm tra window.chrome
Thiếu WebRTC Headless cũ theo các bài viết cũ Kiểm tra khả năng truy cập các API WebRTC

Để đánh giá chính xác hơn, bạn nên chạy cùng một bài kiểm tra trên Chrome thông thường và cấu hình headless đang sử dụng. Kết quả sẽ có ý nghĩa hơn khi đi kèm phiên bản Chrome, hệ điều hành và framework cụ thể. Bạn có thể tham khảo thêm quy trình tự kiểm tra ở mục 5.2.

Lưu ý rằng navigator.webdriver và User-Agent chứa HeadlessChrome là những tín hiệu riêng, không nên gộp chung vào nhóm mẹo cũ cần kiểm tra lại. Hai dấu hiệu này vẫn cần được đánh giá theo cấu hình và phiên bản trình duyệt cụ thể.

3. Website nhận ra Puppeteer, Playwright và Selenium bằng cách nào?

Mỗi framework tự động hóa trình duyệt có cách hoạt động và một số dấu hiệu kỹ thuật riêng. Puppeteer và Playwright thường sử dụng Chrome DevTools Protocol khi điều khiển Chromium, trong khi Selenium hoạt động thông qua WebDriver. Những khác biệt này có thể tạo ra tín hiệu để website nhận diện hoạt động tự động.

Tuy nhiên, bạn không nên xem một dấu hiệu riêng lẻ là đặc điểm luôn xuất hiện ở mọi phiên bản. Kết quả còn phụ thuộc vào trình duyệt, framework và cách khởi chạy.

3.1. Phát hiện Puppeteer

Puppeteer là thư viện Node.js cho phép điều khiển Chrome hoặc Chromium thông qua code. Công cụ này thường được sử dụng để kiểm thử giao diện, chụp ảnh trang web, thu thập dữ liệu và tự động hóa các thao tác trên trình duyệt.

Khi hoạt động, Puppeteer có thể để lại một số dấu hiệu như:

  • Kết nối qua CDP: Puppeteer sử dụng Chrome DevTools Protocol để gửi lệnh và nhận dữ liệu từ trình duyệt. Một số hoạt động liên quan đến giao thức này có thể tạo ra dấu vết mà website quan sát được.
  • Script được chèn vào trang: Puppeteer có thể đưa các đoạn script vào môi trường trang web để hỗ trợ điều khiển và theo dõi hoạt động. Trong một số trường hợp, dấu vết của những script này có thể xuất hiện trong stack trace, chẳng hạn chuỗi pptr:. Tuy nhiên, đây không phải dấu hiệu cố định trên mọi phiên bản.
  • Chế độ headless mặc định: Puppeteer hiện sử dụng headless mode mới theo mặc định. Nếu cần chạy Chrome có giao diện, bạn có thể thiết lập headless: false. Việc thay đổi chế độ hiển thị không làm thay đổi bản chất automation của framework.

    Puppeteer+1

Ví dụ, bạn sử dụng Puppeteer để tự động mở trang sản phẩm và chụp ảnh trên máy cá nhân. Khi chuyển cùng script lên VPS, website lại yêu cầu CAPTCHA hoặc hạn chế truy cập. Nguyên nhân có thể đến từ sự khác biệt về IP, môi trường trình duyệt hoặc các tín hiệu automation mà website phát hiện được.

3.2. Phát hiện Playwright

Playwright là framework tự động hóa trình duyệt hỗ trợ Chromium, Firefox và WebKit. Công cụ này thường được sử dụng trong kiểm thử giao diện, kiểm tra quy trình người dùng và tự động hóa các tác vụ trên website.

Khi phân tích hoạt động của Playwright, website có thể chú ý đến một số dấu hiệu sau:

  • Phiên bản Chromium đi kèm: Theo tài liệu Playwright, mỗi phiên bản framework sử dụng những phiên bản trình duyệt tương ứng. Mặc định, Playwright có thể chạy bản Chromium được tải kèm thay vì Google Chrome có thương hiệu. Sự khác biệt về phiên bản và thông tin trình duyệt có thể khiến Client Hints không giống với cấu hình Chrome thông thường.
  • Script khởi tạo và biến toàn cục: Playwright có thể đưa script vào trang trong quá trình tạo context hoặc khởi tạo môi trường. Một số dấu vết liên quan đến quá trình này có thể được kiểm tra bằng JavaScript.

Dù vậy, các dấu hiệu trên cần được đối chiếu với phiên bản Playwright và Chromium cụ thể. Bạn không nên mặc định rằng chỉ cần sử dụng Playwright là website sẽ luôn phát hiện được hoạt động tự động hóa.

3.3. Phát hiện Selenium

Selenium là bộ công cụ tự động hóa trình duyệt được sử dụng rộng rãi trong kiểm thử phần mềm. Khác với Puppeteer và Playwright, Selenium hoạt động dựa trên WebDriver, một tiêu chuẩn cho phép chương trình bên ngoài điều khiển trình duyệt.

Website có thể chú ý đến một số dấu hiệu liên quan như:

  • WebDriver: Selenium sử dụng cơ chế WebDriver để gửi lệnh điều khiển trình duyệt. Thuộc tính navigator.webdriver có thể cho biết trình duyệt đang được điều khiển tự động theo cơ chế này.
  • Dấu vết ChromeDriver: Trong một số cấu hình ChromeDriver, các biến có tiền tố cdc_ từng được ghi nhận là dấu hiệu liên quan đến Selenium. Tuy nhiên, sự xuất hiện của chúng phụ thuộc vào phiên bản và cách triển khai, không nên xem là đặc điểm luôn tồn tại.

Như vậy, Selenium có thể để lại những dấu hiệu khác với Puppeteer và Playwright do sử dụng kênh điều khiển WebDriver. Bạn có thể tham khảo tiêu chuẩn WebDriver của W3C để hiểu rõ hơn về cơ chế này.

Bảng so sánh framework

Để dễ hình dung sự khác biệt, bạn có thể tham khảo bảng tổng hợp dưới đây:

Framework Kênh điều khiển Dấu hiệu riêng có thể gặp Cần kiểm chứng theo phiên bản
Puppeteer CDP Script được chèn vào trang, chuỗi pptr: Có
Playwright CDP Client Hints, script khởi tạo, biến toàn cục Có
Selenium WebDriver Dấu vết ChromeDriver, biến cdc_ Có

Các dấu hiệu trong bảng chỉ mang tính tham khảo, không phải danh sách đặc điểm cố định của từng framework. Khi kiểm tra một trường hợp cụ thể, bạn nên đối chiếu phiên bản trình duyệt, framework và nguồn phân tích kỹ thuật tương ứng.

4. Chrome remote debugging liên quan gì đến việc phát hiện automation?

Chrome Remote Debugging là cơ chế cho phép công cụ bên ngoài kết nối với Chrome để kiểm tra và điều khiển trình duyệt. Trong khi đó, Chrome DevTools Protocol (CDP) là giao thức được sử dụng để thực hiện quá trình giao tiếp này.

Ba khái niệm cần được phân biệt rõ:

  • Remote debugging port: Là cổng kết nối được mở khi Chrome khởi chạy với tùy chọn --remote-debugging-port.
  • Chrome DevTools Protocol (CDP): Là giao thức cho phép công cụ gửi lệnh và nhận dữ liệu từ Chrome.
  • Dấu vết CDP: Là những thay đổi hoặc hiệu ứng phụ có thể xuất hiện trong môi trường trang khi công cụ sử dụng CDP để điều khiển trình duyệt.

Điểm quan trọng là website quan sát được dấu vết CDP trong trang không đồng nghĩa với việc website có thể đọc trực tiếp cổng remote debugging trên máy tính của bạn.

Chrome cũng đã thay đổi cách hoạt động của các tùy chọn remote debugging từ phiên bản 136. Theo thông báo của Google ngày 17/03/2025, hai tùy chọn --remote-debugging-port và --remote-debugging-pipe không còn được chấp nhận khi sử dụng với thư mục dữ liệu mặc định của Chrome. Người dùng cần chỉ định một thư mục riêng bằng --user-data-dir để tiếp tục sử dụng cơ chế này. Thay đổi được đưa ra nhằm tăng cường bảo vệ cookie và thông tin đăng nhập. Chrome for Testing không bị ảnh hưởng bởi điều chỉnh này.

Nếu sử dụng remote debugging cho mục đích phát triển hoặc kiểm thử, bạn nên lưu ý một số nguyên tắc an toàn:

  • Không mở cổng debugging ra mạng bên ngoài khi không cần thiết.
  • Không sử dụng profile Chrome chính đang đăng nhập tài khoản cá nhân cho các hoạt động debugging.
  • Sử dụng thư mục dữ liệu riêng để tách biệt môi trường kiểm thử với dữ liệu duyệt web thông thường.

5. Làm sao tự kiểm tra trình duyệt tự động đang để lộ tín hiệu gì?

Bạn có thể sử dụng một số website kiểm tra fingerprint để quan sát thông tin mà trình duyệt đang cung cấp. Cách này giúp bạn nhận biết những thuộc tính khác biệt giữa Chrome thông thường và cấu hình đang chạy bằng Puppeteer, Playwright hoặc Selenium.

Tuy nhiên, không có một website kiểm tra đơn lẻ nào có thể đại diện cho toàn bộ hệ thống chống bot. Mỗi công cụ tập trung vào những nhóm tín hiệu khác nhau, vì vậy bạn nên kết hợp kết quả từ nhiều nguồn.

5.1. Các trang kiểm tra nên dùng

Dưới đây là một số công cụ bạn có thể sử dụng để kiểm tra các thuộc tính trình duyệt và mức độ nhất quán của môi trường.

  • bot.sannysoft.com: Bot Sannysoft cung cấp nhiều bài kiểm tra liên quan đến navigator.webdriver, plugins, permissions và một số thuộc tính trình duyệt khác. Kết quả được hiển thị trực tiếp trên trang, giúp bạn quan sát những mục kiểm tra có dấu hiệu bất thường.
headless browser detection
bot.sannysoft.com
  • CreepJS: CreepJS phân tích nhiều thuộc tính của trình duyệt để tìm kiếm sự thiếu nhất quán hoặc dấu hiệu can thiệp vào môi trường. Công cụ cũng cung cấp các đánh giá liên quan đến headless và fingerprint, giúp bạn hiểu rõ hơn về dữ liệu trình duyệt đang công khai.
headless browser detection
CreepJS
  • BrowserLeaks: BrowserLeaks cung cấp các bài kiểm tra riêng cho WebGL, Canvas, WebRTC và nhiều thông tin khác. Thay vì đưa ra một kết luận chung về automation, website giúp bạn xem chi tiết từng thành phần mà trình duyệt đang cung cấp.
headless browser detection
BrowserLeaks
  • Pixelscan: Pixelscan kiểm tra các thông tin liên quan đến browser fingerprint, địa chỉ IP và sự nhất quán giữa những dữ liệu này. Kết quả có thể giúp bạn nhận biết một số điểm chưa phù hợp trong cấu hình trình duyệt.
headless browser detection
Pixelscan

Bạn cần lưu ý rằng vượt qua các bài kiểm tra trên không có nghĩa là website thực tế sẽ chấp nhận lượt truy cập. Hệ thống chống bot có thể sử dụng thêm dữ liệu hành vi, lịch sử IP và các mô hình phân tích ở phía máy chủ mà những công cụ công khai không thể mô phỏng đầy đủ.

5.2. Quy trình tự kiểm tra 5 bước

Để kết quả có giá trị so sánh, bạn nên kiểm tra Chrome thông thường và trình duyệt tự động trong cùng điều kiện. Quy trình dưới đây giúp bạn xác định sự khác biệt giữa hai môi trường một cách có hệ thống.

  1. Ghi lại cấu hình: Xác định phiên bản Chrome, framework đang sử dụng, hệ điều hành và các cờ khởi chạy trình duyệt.
  2. Kiểm tra Chrome thông thường: Mở các website kiểm tra fingerprint bằng Chrome không chạy automation để lấy kết quả tham chiếu.
  3. Chạy cấu hình tự động: Sử dụng cùng các website đó với script ở chế độ headless và headful để thu thập kết quả.
  4. Đối chiếu dữ liệu: So sánh từng thuộc tính giữa các lần kiểm tra và ghi lại những điểm khác biệt.
  5. Lưu kết quả: Chụp ảnh màn hình, ghi ngày kiểm tra và lưu phiên bản trình duyệt để có thể đối chiếu sau mỗi lần cập nhật.

Khi thực hiện, bạn nên giữ nguyên các yếu tố khác như hệ điều hành, kết nối mạng và thiết bị. Nếu thay đổi quá nhiều thông số cùng lúc, bạn sẽ khó xác định nguyên nhân khiến kết quả kiểm tra khác nhau.

5.3. Hidemyacc giúp được gì và không giúp được gì?

Antidetect browser Hidemyacc là công cụ hỗ trợ tạo và quản lý các profile trình duyệt với fingerprint riêng biệt, kết hợp proxy để quản lý môi trường truy cập. Khi sử dụng Hidemyacc, mỗi profile có cookie, proxy và fingerprint riêng, giúp duy trì sự nhất quán của các thông tin môi trường được đề cập ở mục 2.4. Tuy nhiên, Hidemyacc không làm thay đổi bản chất của quá trình automation. Những dấu hiệu liên quan đến cách script điều khiển trình duyệt qua CDP hoặc hành vi tương tác vẫn có thể bị website phát hiện.

headless browser detection
Antidetect browser Hidemyacc

Nếu cần tích hợp công cụ tự động hóa, bạn có thể tham khảo thêm tài liệu Profile API của Hidemyacc.

6. Kết luận

Website không nhận diện headless browser chỉ bằng việc kiểm tra trình duyệt có cửa sổ giao diện hay không. Thay vào đó, hệ thống chống bot có thể kết hợp thông tin từ HTTP header, JavaScript, CDP, fingerprint, kết nối mạng và hành vi tương tác để đánh giá một lượt truy cập.

Điều này cũng lý giải vì sao chuyển từ headless sang headful hoặc chỉ thay đổi User-Agent chưa chắc giải quyết được vấn đề. Một trình duyệt vẫn có thể để lộ dấu hiệu automation thông qua cách công cụ điều khiển nó hoặc những thông tin không nhất quán trong môi trường.

Nếu bạn đang phát triển hoặc kiểm thử ứng dụng, hãy sử dụng các công cụ ở mục 5 để kiểm tra sự khác biệt giữa trình duyệt thông thường và môi trường tự động hóa. Nếu quản lý nhiều tài khoản, bạn nên chú ý đến tính nhất quán của fingerprint, proxy và dữ liệu từng profile, đồng thời tuân thủ quy định của nền tảng đang sử dụng.

Hiểu rõ cách website phát hiện bot sẽ giúp bạn lựa chọn và quản lý môi trường trình duyệt phù hợp hơn, thay vì chỉ tập trung thay đổi từng thông số riêng lẻ.

Đọc thêm: Antidetect browser cho web scraping: Top công cụ 2026

7. FAQ

1. navigator.webdriver bằng true có nghĩa là tài khoản sẽ bị khóa không?

Không nhất thiết. navigator.webdriver chỉ là một tín hiệu cho biết trình duyệt đang được điều khiển tự động theo cơ chế WebDriver. Website có thể kết hợp thông tin này với fingerprint, hành vi và lịch sử truy cập để đánh giá rủi ro. Việc có bị yêu cầu xác minh hoặc hạn chế tài khoản hay không còn phụ thuộc vào chính sách của từng nền tảng.

2. Mở DevTools khi lướt web có bị nhận nhầm là bot không?

Có thể. Một số kỹ thuật phát hiện automation dựa trên CDP có thể ghi nhận hiệu ứng phụ khi Chrome DevTools được mở. Tuy nhiên, đây không phải bằng chứng đủ để kết luận người dùng là bot. Hệ thống chống bot thường cần xem xét thêm những tín hiệu khác trước khi đưa ra quyết định.

3. Chạy Puppeteer ở chế độ có giao diện thì có còn bị coi là automation không?

Có. Chế độ headless hay headful chỉ cho biết trình duyệt có hiển thị cửa sổ hay không, còn automation đề cập đến việc trình duyệt được điều khiển bằng script. Vì vậy, Puppeteer chạy ở chế độ có giao diện vẫn có thể để lại những tín hiệu liên quan đến CDP hoặc phương thức điều khiển tự động.

4. Website có thấy Chrome đang mở cổng remote debugging không?

Website thường chỉ thấy các hiệu ứng phát sinh trong trang khi trình duyệt bị điều khiển, không phải bản thân cổng remote debugging. Dấu vết CDP không đồng nghĩa với việc website truy cập được cổng debugging trên máy bạn. Việc trang web có kiểm tra được cổng cục bộ hay không cần xác minh riêng theo từng trường hợp.

5. Hidemyacc có giúp script tự động không bị phát hiện không?

Không thể khẳng định Hidemyacc giúp script tự động không bị phát hiện. Công cụ hỗ trợ quản lý các profile với fingerprint, cookie và proxy riêng, qua đó giúp duy trì sự nhất quán của môi trường trình duyệt. Tuy nhiên, những tín hiệu liên quan đến CDP, cách script điều khiển trình duyệt và hành vi tương tác vẫn có thể được website nhận diện.

Ads

Read more

Bot Detection Techniques: Website phát hiện bot như thế nào?

Bot Detection Techniques: Website phát hiện bot như thế nào?

Bạn đã thay đổi proxy, thiết lập fingerprint riêng cho từng profile nhưng vẫn gặp checkpoint hoặc bị website hạn chế truy cập? Điều này cho thấy việc quản lý môi trường trình duyệt không đơn giản chỉ là thay đổi một vài thông số. Đằng sau mỗi lượt truy cập, website có thể phân tích nhiều dữ liệu khác nhau để đánh giá người dùng có phải bot hay không. Vậy các kỹ thuật phát hiện bot hoạt động như thế nào, và liệu antidetect browser có thể bị nhận diện? Bài viết sẽ giúp bạn hiểu rõ những cơ chế này cùng các yếu tố ảnh hưởng đến khả năng nhận diện của website.

logo Hidemyacc circle
TLS Fingerprinting là gì? Cách hoạt động và ứng dụng

TLS Fingerprinting là gì? Cách hoạt động và ứng dụng

Khi truy cập một website, bạn không chỉ tạo ra kết nối thông qua địa chỉ IP mà còn sử dụng một trình duyệt hoặc client với những đặc điểm kỹ thuật riêng. Trong quá trình thiết lập kết nối bảo mật, các thông số TLS có thể được phân tích để tạo dấu vân tay kết nối, còn gọi là TLS fingerprint. Vậy TLS fingerprinting là gì, hoạt động như thế nào và khác gì với JA3, JA4 hay HTTP/2 fingerprinting? Bài viết sẽ giúp bạn hiểu cơ chế hoạt động, các ứng dụng phổ biến và cách kiểm tra những tín hiệu này trong thực tế.

logo Hidemyacc circle
Unblocked browser vs Antidetect Browser: Khác nhau như thế nào?

Unblocked browser vs Antidetect Browser: Khác nhau như thế nào?

Nhiều người mới tìm hiểu thường nhầm lẫn giữa Unblocked browser và Antidetect browser vì cả hai đều có thể được sử dụng trong những tình huống liên quan đến truy cập website. Trên thực tế, hai công cụ này giải quyết hai vấn đề khác nhau: một bên tập trung vào khả năng truy cập nội dung bị hạn chế, một bên tập trung vào việc quản lý danh tính trình duyệt. Bài viết sẽ giúp bạn so sánh Unblocked browser và Antidetect browser một cách rõ ràng để chọn đúng công cụ cho nhu cầu của mình.

logo Hidemyacc circle
DataDome CAPTCHA là gì và vì sao bạn liên tục gặp nó?

DataDome CAPTCHA là gì và vì sao bạn liên tục gặp nó?

Bạn đang thao tác bình thường thì màn hình bất ngờ hiện yêu cầu xác minh. Giải xong tưởng đã ổn, nhưng chỉ vài phút sau lại gặp CAPTCHA, thậm chí càng thử lại càng dễ bị chặn. Vấn đề thường không nằm ở bản thân CAPTCHA mà ở những tín hiệu phía sau khiến hệ thống nghi ngờ phiên truy cập của bạn. Bài viết này sẽ giải thích cơ chế đằng sau DataDome CAPTCHA, nguyên nhân khiến bạn liên tục gặp yêu cầu xác minh, giải thích cơ chế, vì sao người dùng thật cũng bị chặn, và xử lý theo từng trường hợp.

logo Hidemyacc circle
iPhey Test: Kiểm tra fingerprint và cách cải thiện

iPhey Test: Kiểm tra fingerprint và cách cải thiện

Khi dùng nhiều tài khoản hoặc truy cập các nền tảng có hệ thống chống gian lận, chỉ ẩn địa chỉ IP là chưa đủ, vì website vẫn có thể thu thập nhiều thông tin khác từ trình duyệt và thiết bị để tạo dấu vân tay trình duyệt. iPhey Test là công cụ giúp bạn nhìn thấy chính xác những thông tin đó đang bị lộ ra ngoài như thế nào. Bài viết sẽ giải thích iPhey Test là gì, kiểm tra những hạng mục nào, cách đọc kết quả, các lỗi thường gặp, và cách dùng Hidemyacc để thiết lập một môi trường trình duyệt nhất quán, giúp cải thiện kết quả iPhey Fingerprint Test.

logo Hidemyacc circle
Chrome remote debugging: cách bật và sử dụng chi tiết

Chrome remote debugging: cách bật và sử dụng chi tiết

Khi cần điều khiển trình duyệt bằng mã, nhiều người dừng lại ở việc mở Chrome rồi giả lập thao tác chuột. Cách đó chậm, dễ gãy và khó mở rộng. Chrome remote debugging mở ra một hướng khác: bạn nói chuyện trực tiếp với nhân trình duyệt qua giao thức DevTools, đọc DOM, chặn request, chạy script, quản lý nhiều phiên cùng lúc. Bài viết đi qua cơ chế hoạt động, các cách bật và kết nối, những lỗi hay gặp, và phần quan trọng nhất là cách dùng sao cho bạn không tự để lộ dấu hiệu tự động hoá trước các nền tảng đang theo dõi.

logo Hidemyacc circle