🎯 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 duyệt không bị phát hiện bằng dấu vân tay Puppeteer với Scrapeless

James Thompson
James Thompson

Scraping and Proxy Management Expert

09-Jul-2026

Tóm tắt:

  • Puppeteer đã tương tác với Giao thức DevTools của Chrome, vì vậy puppeteer.connect() chỉ định nó tới Scrapeless bằng một URL duy nhất. Thay thế một puppeteer.launch() cục bộ bằng một kết nối tới trình duyệt đám mây và mọi script sẽ chạy trên một danh tính sạch.
  • Một trình duyệt Puppeteer cục bộ rò rỉ tự động hóa trên ba trục: cờ navigator.webdriver, dấu vân tay mặc định không có đầu, và địa chỉ IP thoát của bạn. Hệ thống chống bot ghi điểm cả ba điều này lại với nhau.
  • Trình duyệt Lập trình Scrapeless đáp ứng cả ba yếu tố ở phía máy chủ — Chromium tự phát triển thực sự, một dấu vân tay ổn định theo phiên mà không có dấu hiệu webdriver, và đầu ra dân cư ở hơn 195 quốc gia.
  • Mã Puppeteer của bạn không thay đổi. page.goto, page.evaluate, các bộ chọn và thời gian chờ hoạt động chính xác như khi chạy cục bộ; chỉ có dòng kết nối di chuyển.
  • Đã xác minh trực tiếp: một phiên puppeteer.connect() đọc navigator.webdriverfalse, báo cáo một địa chỉ IP dân cư Mỹ, và trả về tiêu đề thực sự của trang mục tiêu.
  • Miễn phí để bắt đầu. Tài khoản Scrapeless mới bao gồm thời gian chạy Trình duyệt Lập trình miễn phí — đăng ký tại app.scrapeless.com.

Giới thiệu: kết nối Puppeteer với một trình duyệt cho dáng vẻ sạch

Puppeteer điều khiển một Chromium thực sự qua Giao thức DevTools. Khởi động Chromium đó trên máy của bạn và mọi script sẽ thừa hưởng các tín hiệu khiến tự động hóa trở nên rõ ràng: nó tự công bố thông qua thuộc tính navigator.webdriver, gửi các phông chữ và hành vi canvas mặc định không có đầu, và thoát từ một IP mà các dịch vụ danh tiếng đã nhận diện.

Bạn có thể vá từng điều đó với một plugin ngụy trang và sau đó tiếp tục vá khi Chromium và các công cụ phát hiện di chuyển. Có một con đường ngắn hơn. Puppeteer kết nối tới bất kỳ trình duyệt nào phơi bày một điểm cuối DevTools qua puppeteer.connect(), và Trình duyệt Lập trình Scrapeless một điểm cuối Giao thức DevTools của Chrome được truy cập qua một URL WebSocket. Hướng Puppeteer đến nó và dấu vân tay, bề mặt hành vi, và địa chỉ IP thoát sẽ di chuyển sang phía máy chủ — script của bạn vẫn giữ nguyên vị trí.


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

  • Chạy script chống lại các trang web được bảo vệ bởi bot — trình duyệt đám mây giải quyết các thử thách trong quá trình render, vì vậy page.goto đạt được nội dung.
  • Địa phương hóa phiên — cố định proxyCountry để một trang hiển thị như cách một du khách trong thị trường đó nhìn thấy.
  • Gửi một dấu vân tay nhất quán — truyền một đối tượng fingerprint để user agent, nền tảng, màn hình, và múi giờ giữ nguyên tính nhất quán.
  • Giữ nguyên trạng thái đăng nhập — mang theo profileId để cookie và bộ nhớ cục bộ tồn tại giữa các lần chạy.
  • Mở rộng vượt ra ngoài máy tính của bạn — các phiên hoạt động trong đám mây, không phải trên máy tính xách tay của bạn.
  • Giữ tự động hóa giống nhaupage.evaluate, các bộ chọn, nhấp chuột, và thời gian chờ không thay đổi.

Tại sao chọn Trình duyệt Lập trình Scrapeless

Trình duyệt Lập trình Scrapeless là một trình duyệt đám mây dễ 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à đại lý AI. Đặc biệt cho Puppeteer, nó mang lại:

  • Chromium tự phát triển thực sự chạy JavaScript trang giống như Chrome, vì vậy các SPA và thử thách được giải quyết.
  • Dấu vân tay ổn định theo phiên — không có dấu hiệu navigator.webdriver, không có các kiểu mặc định không có đầu bị rò rỉ.
  • Đầu ra dân cư ở hơn 195 quốc gia, được chọn theo phiên với một giá trị proxyCountry duy nhất.
  • Khả năng duy trì phiên thông qua profileId, vì vậy một luồng xác thực giữ trạng thái của nó.
  • Một bề mặt kết nối — mọi tùy chọn đều là tham số truy vấn trên cùng một điểm cuối WebSocket.

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


Các yêu cầu tiên quyết

  • Node.js 18 hoặc mới hơn
  • puppeteer-core được cài đặt (không cần Chromium được đóng gói — bạn kết nối với một cái từ xa)
  • Một tài khoản Scrapeless và khóa API — đăng ký tại app.scrapeless.com

Tất cả chi tiết kết nối có trong tài liệu Trình duyệt Lập trình.


Cài đặt

Sử dụng puppeteer-core — nó được cung cấp mà không cần tải xuống Chromium cục bộ, vì trình duyệt nằm trong đám mây.

bash Copy
npm install puppeteer-core
export SCRAPELESS_API_KEY=your_api_token_here   # khóa miễn phí tại https://app.scrapeless.com

Cấu hình kết nối

Điểm cuối là wss://browser.scrapeless.com/api/v2/browser, và mọi tùy chọn là một tham số truy vấn. Cố định proxyCountry để một vùng dân cư.

javascript Copy
import { URLSearchParams } from "node:url";

function scrapelessEndpoint(extra = {}) {
```javascript
const params = new URLSearchParams({
    token: process.env.SCRAPELESS_API_KEY,
    sessionTTL: "180",       // giây
    proxyCountry: "US",
    ...extra,
});
return `wss://browser.scrapeless.com/api/v2/browser?${params}`;
}

## Kết nối và chạy

Thay thế `puppeteer.launch()` bằng `puppeteer.connect()` và truyền cho nó endpoint. Mọi thứ sau đó là chuẩn Puppeteer.

```javascript
import puppeteer from "puppeteer-core";
import { URLSearchParams } from "node:url";

const params = new URLSearchParams({
  token: process.env.SCRAPELESS_API_KEY,
  sessionTTL: "180",
  proxyCountry: "US",
});
const endpoint = `wss://browser.scrapeless.com/api/v2/browser?${params}`;

const browser = await puppeteer.connect({ browserWSEndpoint: endpoint });
const page = await browser.newPage();

await page.goto("https://www.scrapeless.com/en", { waitUntil: "domcontentloaded", timeout: 60000 });
console.log("tiêu đề:", await page.title());
console.log("navigator.webdriver:", await page.evaluate(() => navigator.webdriver));

await page.goto("https://httpbin.io/ip", { waitUntil: "domcontentloaded", timeout: 60000 });
console.log("ip thoát:", JSON.parse(await page.evaluate(() => document.body.innerText)).origin);

await browser.close();

Một lần chạy trực tiếp của tập lệnh này in ra tiêu đề trang Công cụ thu thập thông tin web dễ dàng - Scrapeless, navigator.webdriver: false, và một địa chỉ IP thoát khu dân cư của Mỹ — cùng một API Puppeteer mà bạn đã sử dụng, được cung cấp qua trình duyệt đám mây.

Nhận khóa API của bạn trong gói miễn phí: app.scrapeless.com

Gửi một dấu vân tay nhất quán

Một đối tượng fingerprint giữ cho danh tính quảng bá của trình duyệt nhất quán — tác nhân người dùng, nền tảng, màn hình và múi giờ đều đồng ý. Mã hóa JSON, mã hóa URL và truyền nó như một tham số nữa. Thông số W3C WebDriver yêu cầu tự động hóa tuân thủ phải công khai cờ webdriver; trình duyệt đám mây không mang nó, vì vậy không gì mâu thuẫn với dấu vân tay bạn gửi.

javascript Copy
const fingerprint = {
  userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, giống như Gecko) Chrome/126.0.0.0 Safari/537.36",
  platform: "Windows",
  screen: { width: 1920, height: 1080 },
  localization: { languages: ["en-US", "en"], timezone: "America/New_York" },
};
const endpoint = scrapelessEndpoint({ fingerprint: encodeURIComponent(JSON.stringify(fingerprint)) });

Nơi mà Puppeteer cục bộ dừng lại

Chạy Puppeteer trên Chromium của riêng bạn là tốt cho các trang mở, không được bảo vệ. Ma sát bắt đầu khi mục tiêu ghi điểm trình duyệt: một thách thức trung gian chặn trên một IP trung tâm dữ liệu, một trang ghi dấu vân tay của các mặc định không có đầu, hoặc một bức tường đăng nhập muốn một danh tính ổn định qua các lần truy cập. Mỗi cái là một vấn đề dấu vân tay, hành vi, hoặc IP — chính xác là ba cái mà trình duyệt đám mây xử lý ở phía máy chủ. Kết nối với Scrapeless chuyển những trường hợp đó sang một phiên được quản lý trong khi các cuộc gọi page của bạn vẫn giống nhau.


Những gì bạn nhận lại

Phiên hoạt động như bất kỳ phiên Puppeteer nào — page.goto, page.evaluate, page.$$eval, và cookies đều hoạt động. Một vài quan sát chân thực từ việc chạy nó qua trình duyệt đám mây:

  • navigator.webdriverfalse, vì vậy lần kiểm tra đầu tiên mà một trang chạy đọc như một Chrome thật sự.
  • sessionTTL được tính bằng giây ở đây — đặt đủ lâu để bao phủ toàn bộ quy trình; phiên sẽ đóng khi hết hạn.
  • IP thoát khớp với proxyCountry — các trang địa lý được bảo vệ giải quyết như một khách truy cập địa phương nhìn thấy chúng.
  • Khởi động phiên cho các trang cứng đầu — tải trang chính của trang trước trang được bảo vệ, để bề mặt hành vi đọc như một lần truy cập bình thường.

Kết luận: cùng Puppeteer, trình duyệt sạch hơn

Puppeteer quyết định làm gì; Scrapeless quyết định cách trình duyệt trông như thế nào đối với trang web. Sự tích hợp chỉ cần một dòng — puppeteer.connect() đối với trình duyệt đám mây — và phần còn lại của tập lệnh của bạn không bị ảnh hưởng. Gán proxyCountry cho một khu vực dân cư, truyền một fingerprint nhất quán, và tái sử dụng một profileId cho các luồng xác thực. Để chạy cùng một trình duyệt đám mây từ Python, hãy xem hướng dẫn Scrapling production-scraper, và so sánh các gói trên trang giá Scrapeless.


Sẵn sàng xây dựng quy trình thu thập thông tin Puppeteer của bạn?

Tham gia cộng đồng của chúng tôi để nhận gói miễn phí và kết nối với các nhà phát triển xây dựng quy trình Puppeteer: Discord · Telegram.

Copy
Đăng ký tại [app.scrapeless.com](https://app.scrapeless.com/passport/login/?utm_source=website&utm_medium=blog&utm_campaign=scrapingbrowser&utm_term=puppeteer-undetected-fingerprint-browser) để nhận thời gian chạy Scraping Browser miễn phí và chỉ định `puppeteer.connect()` đến trình duyệt đám mây mà các mục tiêu của bạn không thể xác định dấu vân tay.

---

## FAQ

**Q: Tôi có phải thay đổi mã Puppeteer của mình không?**
Không. Bạn chỉ cần thay đổi cách trình duyệt được lấy — `puppeteer.connect({ browserWSEndpoint })` thay vì `puppeteer.launch()`. Mọi lệnh gọi `page` sau đó đều giống nhau.

**Q: `puppeteer` hay `puppeteer-core`?**
Sử dụng `puppeteer-core`. Nó bỏ qua việc tải Chromium đi kèm vì bạn kết nối với trình duyệt đám mây thay vì khởi động một cái địa phương.

**Q: Tôi có cần một proxy không?**
Không. Egress dân cư được tích hợp sẵn — đặt `proxyCountry` thành một khu vực hoặc `ANY`. Không có proxy riêng nào để kết nối.

**Q: `sessionTTL` là tính bằng giây hay mili giây?**
Đối với kết nối Scraping Browser ở đây, nó tính bằng giây — `180` là ba phút. Đặt nó để bao phủ toàn bộ quy trình.

**Q: Lập trình web scraping với Puppeteer có hợp pháp không?**
Truy cập dữ liệu công khai là thường được phép, nhưng quy tắc thay đổi theo từng khu vực pháp lý và trang web. Xem lại các điều khoản dịch vụ của mục tiêu, tôn trọng chỉ dẫn của robot, và tham khảo luật sư cho bất kỳ vấn đề nhạy cảm nào.

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