🎯 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 phát hiện dấu vân tay không bị phát hiện của Node.js: Puppeteer & Playwright

Ava Wilson
Ava Wilson

Expert in Web Scraping Technologies

09-Jul-2026

Tóm tắt:

  • Trong Node.js, trình duyệt là điều khiến bạn bị phát hiện — không phải mã của bạn. Cả Puppeteer và Playwright đều điều khiển Chromium qua Giao thức DevTools, và cả hai đều kết nối với một trình duyệt từ xa qua một URL, vì vậy cách khắc phục là thay đổi nơi trình duyệt chạy, không phải viết lại kịch bản.
  • Một trình duyệt Node.js cục bộ rò rỉ tự động hóa trên ba trục một lúc: cờ navigator.webdriver, dấu vân tay mặc định không có giao diện, và địa chỉ IP xuất khẩu của bạn. Các thiết bị phát hiện chấm điểm tất cả ba cùng một lúc, đó là lý do tại sao việc vá lỗi từng cái một không bao giờ hiệu quả.
  • Một điểm cuối phục vụ cả hai thư viện. wss://browser.scrapeless.com/api/v2/browser là một điểm cuối CDP — puppeteer.connect({ browserWSEndpoint })chromium.connectOverCDP() đều gắn vào nó và nhận được Chromium thực sự, một dấu vân tay sạch theo phiên và điểm xuất khẩu từ khu dân cư tại hơn 195 quốc gia.
  • Viết kết nối một lần, sử dụng lại ở khắp nơi. Một trợ giúp duy nhất xây dựng điểm cuối giữ cho mọi kịch bản — Puppeteer hoặc Playwright — chỉ vào cùng một phiên đã quản lý.
  • Đã được xác minh trực tiếp: cả kết nối Puppeteer và Playwright đọc navigator.webdriverfalse và trả về tiêu đề trang mục tiêu thực tế, và phiên chạy Puppeteer báo cáo địa chỉ IP xuất khẩu từ khu dân cư ở Mỹ.
  • 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 Ghi lại miễn phí — đăng ký tại app.scrapeless.com.

Giới thiệu: trình duyệt là điều tiết lộ, không phải kịch bản

Một ngăn xếp ghi lại Node.js thường bắt đầu cục bộ: cài đặt Puppeteer hoặc Playwright, khởi động Chromium, điều khiển trang. Nó hoạt động cho đến khi mục tiêu bắt đầu chấm điểm trình duyệt. Sau đó, ba tín hiệu giống nhau xuất hiện bất kể thư viện nào bạn đã chọn — kịch bản thông báo tự động hóa qua thuộc tính navigator.webdriver, bản dựng không có giao diện gửi font chữ và hành vi canvas mặc định, và lưu lượng truy cập xuất phát từ địa chỉ IP mà các dịch vụ uy tín đã biết.

Đó là các vấn đề ở cấp trình duyệt và mạng, không phải các vấn đề logic. Cả Puppeteer và Playwright đều biết cách gắn vào một trình duyệt mà họ không khởi động — qua Giao thức DevTools của Chrome — và Trình duyệt Ghi lại Scrapeless chính xác là như vậy: một điểm cuối CDP truy cập qua một URL WebSocket. Chỉ cần chỉ định bất kỳ thư viện nào vào nó và dấu vân tay, hành vi, và địa chỉ IP xuất khẩu đều chuyển sang phía máy chủ trong khi mã Node.js của bạn vẫn giữ nguyên.


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

  • Giữ nguyên thư viện của bạn — cả Puppeteer và Playwright đều gắn vào cùng một điểm cuối; không cần viết lại.
  • Chạy trên các trang bảo vệ chống bot — các thử thách được xử lý trong quá trình render, vì vậy điều hướng đến nội dung.
  • Địa phương hóa phiên — một giá trị proxyCountry chọn khu vực xuất khẩu từ khu dân cư.
  • Gửi một dấu vân tay đồng nhất — một đối tượng fingerprint giữ cho user agent, nền tảng, màn hình, và múi giờ nhất quán.
  • Duy trì trạng thái — một profileId chứa cookies và bộ nhớ cục bộ qua các lần chạy.
  • Mở rộng ngoài máy tính xách tay của bạn — các phiên chạy trên đám mây, vì vậy các lô không bị ràng buộc vào một Chromium cục bộ.

Tại sao Trình duyệt Ghi lại Scrapeless

Trình duyệt Ghi lại Scrapeless là một trình duyệt đám mây chống phát hiện có thể tùy chỉnh, được thiết kế cho các trình thu thập dữ liệu web và các tác nhân AI. Đối với một ngăn xếp Node.js cụ thể, nó mang lại:

  • Chromium tự phát triển thực sự chạy JavaScript trang y như Chrome, vì vậy các ứng dụng đơn trang và các thử thách được giải quyết.
  • Một dấu vân tay đồng nhất theo phiên — không có dấu vết navigator.webdriver, không có các mặc định không có giao diện rò rỉ.
  • Xuất khẩu từ khu dân cư tại hơn 195 quốc gia, được chọn theo phiên với một giá trị proxyCountry.
  • Một bề mặt CDP cho cả hai thư viện — Puppeteer và Playwright kết nối với cùng một điểm cuối WebSocket.
  • Duy trì phiên thông qua profileId, vì vậy một luồng xác thực giữ nguyên trạng thái của nó.

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


Yêu cầu trước khi bắt đầu

  • Node.js 18 trở lên
  • puppeteer-core và/hoặc playwright-core (cả hai đều bỏ qua tải xuống trình duyệt cục bộ — bạn kết nối với một trình duyệt từ xa)
  • Tài khoản Scrapeless và khóa API — đăng ký tại app.scrapeless.com

Chi tiết kết nối đầy đủ có trong tài liệu về Trình duyệt Ghi lại.


Cài đặt

Cài đặt bất kỳ thư viện nào mà dự án của bạn đã sử dụng — hoặc cả hai.

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

Viết kết nối một lần

Điểm kết thúc là giống nhau cho cả hai thư viện, vì vậy hãy xây dựng nó ở một nơi. Mọi tùy chọn — proxyCountry, fingerprint, profileId — là một tham số truy vấn.

javascript Copy
// scrapeless.js — một trình tạo điểm kết thúc cho toàn bộ dự án
import { URLSearchParams } from "node:url";

export function scrapelessEndpoint(extra = {}) {
  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}`;
}

Đường dẫn A — Puppeteer

Puppeteer gắn kết với puppeteer.connect(). Thông số kỹ thuật 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 theo nó.

javascript Copy
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("puppeteer title:", await page.title());
console.log("puppeteer navigator.webdriver:", await page.evaluate(() => navigator.webdriver));
await browser.close();

Chạy thực tế in ra puppeteer title: Bộ công cụ thu thập thông tin web dễ dàng - Scrapelesspuppeteer navigator.webdriver: false, trên một IP đầu ra nội địa của Hoa Kỳ.

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

Đường dẫn B — Playwright

Playwright gắn kết với chromium.connectOverCDP() đến cùng một điểm kết thúc. Mã sau đây là tiêu chuẩn Playwright.

javascript Copy
import { chromium } from "playwright-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 chromium.connectOverCDP(endpoint);
const page = await browser.newPage();
await page.goto("https://www.scrapeless.com/en", { waitUntil: "domcontentloaded", timeout: 60000 });
console.log("playwright title:", await page.title());
console.log("playwright navigator.webdriver:", await page.evaluate(() => navigator.webdriver));
await browser.close();

Chạy thực tế in ra playwright title: Bộ công cụ thu thập thông tin web dễ dàng - Scrapelessplaywright navigator.webdriver: false.

Lựa chọn giữa chúng

Điểm kết thúc là giống nhau, vì vậy hãy chọn thư viện dựa trên các phẩm chất riêng của nó, không phải dựa vào cái nào vượt qua phát hiện — trình duyệt đám mây xử lý điều đó cho cả hai:

  • Đã sử dụng Puppeteer? Chuyển từ puppeteer.launch() sang puppeteer.connect({ browserWSEndpoint }). Không có gì khác thay đổi.
  • Đã sử dụng Playwright? Chuyển từ chromium.launch() sang chromium.connectOverCDP(). Các định vị và tự động chờ không thay đổi.
  • Bắt đầu mới? Các định vị và tự động chờ của Playwright rất tiện lợi cho những quy trình phức tạp; Puppeteer là gọn gàng khi bạn chủ yếu điều hướng và đọc. Cả hai đều kết nối với cùng một phiên.

Nơi mà trình duyệt Node.js cục bộ dừng lại

Chạy Chromium trên máy của bạn là tốt cho các trang mở. Ma sát bắt đầu khi mục tiêu chấm điểm trình duyệt: một trang thách thức tạm thời dừng lại trên một IP trung tâm dữ liệu, một trang xác định dấu vân tay mặc định không đầ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. Những điều đó là vấn đề dấu vân tay, hành vi, và IP — ba vấn đề mà trình duyệt đám mây xử lý bên máy chủ — và chúng ảnh hưởng đến Puppeteer và Playwright theo cùng một cách. Kết nối với Scrapeless đưa những trường hợp đó vào một phiên được quản lý trong khi mã Node.js của bạn vẫn giống nhau.


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

Cả hai đường dẫn đều trả một đối tượng trình duyệt bình thường cho thư viện của chúng — các trang Puppeteer, các định vị Playwright — và hoạt động như bất kỳ phiên cục bộ nào. Một số quan sát chân thực:

  • navigator.webdriverfalse trên cả hai, vì vậy kiểm tra đầu tiên mà một trang thực hiện đọc như một Chrome thực sự.
  • sessionTTL được tính bằng giây ở đây — thiết lập nó để bao trùm toàn bộ quy trình; phiên sẽ đóng khi hết hạn.
  • IP đầu ra khớp với proxyCountry — các trang hạn chế địa lý được giải quyết như một khách truy cập địa phương thấy chúng.
  • Khởi động phiên cho các trang cứng đầu — tải trang chính của trang web trước khi 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: một điểm kết thúc, cả hai thư viện

Trong Node.js, bề mặt phát hiện là trình duyệt, vì vậy cách khắc phục là di chuyển trình duyệt — không viết lại trình thu thập dữ liệu. Xây dựng điểm cuối một lần, sau đó puppeteer.connect() hoặc chromium.connectOverCDP() với nó và giữ nguyên phần còn lại của mã của bạn. Gán proxyCountry cho một khu vực dân cư, truyền một fingerprint đồng nhất, 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 thay vào đó, hãy xem hướng dẫn Scrapling production-scraper, và so sánh các gói trên trang giá của Scrapeless.


Sẵn sàng xây dựng pipeline thu thập dữ liệu Node.js 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 đang xây dựng các pipeline thu thập dữ liệu Node.js: Discord · Telegram.

Đăng ký tại app.scrapeless.com để nhận runtime Trình thu thập dữ liệu miễn phí và chĩa Puppeteer hoặc Playwright tới trình duyệt đám mây mà các mục tiêu của bạn không thể xác thực dấu vân tay.


Câu hỏi thường gặp

Q: Tôi có phải chọn giữa Puppeteer và Playwright không?
Không. Cả hai đều kết nối với cùng một điểm cuối Scrapeless — puppeteer.connect({ browserWSEndpoint }) hoặc chromium.connectOverCDP(). Sử dụng cái mà dự án của bạn đã chạy, hoặc cả hai.

Q: Tôi có phải thay đổi logic thu thập dữ liệu của mình không?
Không. Bạn thay đổi cách mà trình duyệt được lấy; điều hướng, bộ chọn/định vị, và đánh giá vẫn giữ nguyên.

Q: Tại sao lại là gói -core?
puppeteer-coreplaywright-core bỏ qua việc tải xuống trình duyệt đóng gói 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. Lưu lượng xuất khẩu dân cư đã được tích hợp — đặt proxyCountry thành một khu vực hoặc ANY.

Q: Việc thu thập dữ liệu web bằng Node.js có hợp pháp không?
Việc truy cập dữ liệu công khai thường được phép, nhưng các quy định thay đổi theo khu vực và trang web. Xem xét các điều khoản dịch vụ của mục tiêu, tôn trọng các chỉ thị robots, và tham khảo ý kiến luật sư đối với bất kỳ điều gì nhạy cảm.

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