Headless browser bị phát hiện: website nhìn thấy gì và cấu hình sao cho hợp lý
Cập nhật:
Headless browser bị phát hiện vì nó để lại những dấu vết mà trình duyệt người dùng bình thường không có: cờ navigator.webdriver bật, User-Agent chứa chữ HeadlessChrome ở chế độ cũ, kích thước cửa sổ mặc định, card đồ hoạ giả lập, múi giờ không khớp với IP và thao tác nhanh đều như máy. Proxy chỉ thay địa chỉ IP, không che được những dấu vết này. Cách làm hợp lý là cấu hình trình duyệt nhất quán với proxy, giữ phiên ổn định và chạy với nhịp vừa phải, thay vì cố giả mạo mọi thứ. Bài này liệt kê các dấu hiệu phổ biến, cách tự kiểm tra và cấu hình cho Playwright, Puppeteer, Selenium.
Headless browser là gì và vì sao website quan tâm
Headless browser là trình duyệt chạy không có cửa sổ hiển thị, điều khiển bằng code qua các công cụ như Playwright, Puppeteer hay Selenium. Nó dùng hợp pháp rất nhiều: kiểm thử giao diện, chụp màn hình, tạo PDF, theo dõi giá công khai. Nhưng nó cũng là công cụ quen thuộc của bot spam và cào dữ liệu quá tải, nên nhiều website có hệ thống chống bot để nhận diện.
Hệ thống chống bot không chỉ nhìn một tín hiệu. Chúng gom nhiều dấu hiệu nhỏ thành một điểm rủi ro, rồi quyết định cho qua, hiện CAPTCHA hay chặn. Một dấu hiệu đơn lẻ hiếm khi đủ để chặn, nhưng nhiều dấu hiệu mâu thuẫn nhau thì gần như chắc chắn bị chú ý.
Các dấu hiệu headless phổ biến
| Dấu hiệu | Website thấy gì | Ghi chú |
|---|---|---|
navigator.webdriver | Giá trị true khi trình duyệt bị điều khiển tự động | Là chuẩn của WebDriver, công cụ tự động hoá thường bật |
| User-Agent | Chuỗi chứa HeadlessChrome ở chế độ headless cũ | Chế độ headless mới của Chrome dùng UA gần như bản thường |
| Viewport, màn hình | Kích thước cửa sổ mặc định, màn hình không khớp cửa sổ | Ít người dùng thật có đúng kích thước mặc định của công cụ |
| WebGL, phông chữ | Card đồ hoạ phần mềm, bộ phông chữ ít bất thường | Hay gặp trên máy chủ Linux không có GPU |
| Ngôn ngữ, múi giờ | Ngôn ngữ trống hoặc múi giờ UTC trong khi IP ở Việt Nam | Mâu thuẫn giữa IP và môi trường |
| Hành vi | Không di chuột, không cuộn, bấm ngay lập tức, nhịp đều | Tín hiệu hành vi thường quan trọng hơn kỹ thuật |
| Phiên | Mỗi lần chạy là trình duyệt trắng, không cookie | Người dùng thật quay lại với lịch sử |
Tự kiểm tra trình duyệt của bạn trông thế nào
- Mở trình duyệt tự động hoá, truy cập trang kiểm tra IP của tôi để xác nhận IP và quốc gia mà website nhìn thấy đúng là của proxy.
- Chạy
page.evaluate('navigator.webdriver'),navigator.languages,Intl.DateTimeFormat().resolvedOptions().timeZonevà in kết quả; so với quốc gia của IP. - Chụp màn hình trang đích ở cấu hình hiện tại để xem có bị chuyển sang trang thử thách hay không.
- Kiểm tra rò rỉ IP qua WebRTC bằng công cụ kiểm tra rò rỉ WebRTC, đặc biệt khi chạy chế độ có giao diện.
- So sánh với cùng trang mở bằng trình duyệt thường trên cùng proxy. Nếu trình duyệt thường qua được còn bản tự động bị chặn, vấn đề nằm ở trình duyệt chứ không phải IP.
Cấu hình hợp lý cho Playwright và Puppeteer
Mục tiêu là một môi trường nhất quán: mọi thông tin trình duyệt kể về bản thân phải khớp với nhau và khớp với IP. Không cần giả mạo hàng chục thuộc tính; giả lố thường tạo thêm mâu thuẫn.
- Dùng chế độ headless mới của Chrome hoặc chạy có giao diện (
headless=False) trên máy có màn hình ảo khi cần, thay vì chế độ headless cũ. - Đặt viewport phổ biến, ví dụ
viewport={'width': 1366, 'height': 768}, thay cho kích thước mặc định. - Đặt
locale='vi-VN'vàtimezone_id='Asia/Ho_Chi_Minh'khi dùng proxy Việt Nam; với proxy Mỹ thì dùng locale và múi giờ của Mỹ. - Giữ User-Agent đúng với trình duyệt đang chạy. Đổi UA sang một phiên bản hay hệ điều hành khác trong khi engine không đổi là một mâu thuẫn dễ thấy.
- Dùng thư mục profile cố định (
launch_persistent_contexttrong Playwright,userDataDirtrong Puppeteer) để giữ cookie giữa các lần chạy. - Mỗi phiên hoặc tài khoản gắn một proxy cố định; xem hướng dẫn cài proxy cho Playwright và cho Puppeteer.
- Thêm thời gian chờ tự nhiên giữa các thao tác, chờ trang tải xong thay vì bấm ngay.
Về các plugin stealth
Có những plugin cộng đồng sửa một loạt thuộc tính để trình duyệt tự động trông giống trình duyệt thường. Chúng có thể giúp với các bài kiểm thử hợp lệ, nhưng không phải phép màu: hệ thống chống bot cập nhật liên tục, và những bản vá cũ có khi lại thành dấu hiệu nhận diện. Quan trọng hơn, dùng chúng để vượt lớp bảo vệ của website nhằm làm điều website cấm vẫn là vi phạm điều khoản, dù kỹ thuật có thành công.
Nếu bạn liên tục bị chặn dù đã cấu hình hợp lý và chạy chậm, hãy coi đó là câu trả lời của website. Tìm API chính thức, giảm phạm vi dữ liệu, hoặc liên hệ chủ website. Bài proxy và CAPTCHA bàn thêm về giới hạn này.
Vai trò của proxy trong bức tranh này
Proxy quyết định IP, quốc gia và loại mạng mà website nhìn thấy. Một IP riêng, sạch loại bỏ được tín hiệu xấu đến từ người dùng chung IP, và giúp bạn đặt múi giờ, ngôn ngữ khớp với vị trí. Nhưng proxy không sửa được navigator.webdriver, viewport hay hành vi. Hai phần phải đi cùng nhau.
Với cào dữ liệu công khai, IPv4 riêng thường đủ. Với tài khoản giá trị chạy qua trình duyệt, proxy ISP tĩnh ở Việt Nam hoặc Mỹ trông gần mạng gia đình hơn. Muốn hiểu cách website đánh giá IP, đọc cách website phát hiện proxy; muốn hiểu phần trình duyệt, đọc vân tay trình duyệt là gì.
Câu hỏi thường gặp
Chạy headless=False có hết bị phát hiện không?
Không chắc. Chạy có giao diện bớt một số dấu hiệu, nhưng navigator.webdriver, hành vi và sự mâu thuẫn giữa IP với múi giờ vẫn còn. Cần cấu hình nhất quán cả gói.
Đổi proxy có giúp headless browser không bị chặn không?
Chỉ khi IP là nguyên nhân chính, ví dụ IP dùng chung có lịch sử xấu. Nếu website nhận ra dấu hiệu tự động hoá của trình duyệt, đổi IP không giải quyết được.
Nên đặt múi giờ và ngôn ngữ thế nào khi dùng proxy Việt Nam?
Đặt locale vi-VN và timezone Asia/Ho_Chi_Minh trong context trình duyệt, để môi trường khớp với vị trí của IP.
Trình duyệt antidetect khác gì headless browser?
Trình duyệt antidetect quản lý nhiều profile có vân tay riêng, thường dùng thủ công cho tài khoản. Headless browser là trình duyệt điều khiển bằng code cho tự động hoá. Cả hai đều cần proxy khớp với cấu hình.
Có cách nào để không bao giờ bị phát hiện không?
Không. Hệ thống chống bot thay đổi liên tục và không có cấu hình hay loại proxy nào đảm bảo tuyệt đối. Hãy chạy chậm, nhất quán và trong phạm vi website cho phép.
Proxy riêng khớp với cấu hình trình duyệt
IPv4 riêng ở 7 nước và ISP tĩnh ở Việt Nam, Mỹ. HTTP/HTTPS, xác thực user và mật khẩu, dùng được ngay trong Playwright, Puppeteer, Selenium.
Xem bảng giá