What là puppeteer và cách sử dụng trong việc thu thập dữ liệu web | Hướng dẫn hoàn chỉnh 2026

Aloísio Vítor
Image Processing Expert
03-Dec-2025

Gia công dữ liệu từ web đã trở thành kỹ năng quan trọng đối với bất kỳ ai làm việc với việc trích xuất dữ liệu từ web. Dù bạn là nhà phát triển, nhà khoa học dữ liệu hay người đam mê muốn thu thập thông tin từ các trang web, Puppeteer là một trong những công cụ mạnh mẽ nhất mà bạn có thể sử dụng. Hướng dẫn đầy đủ này sẽ đi sâu vào việc Puppeteer là gì và cách sử dụng hiệu quả nó trong việc trích xuất dữ liệu từ web.
Giới thiệu về Puppeteer
Puppeteer là một thư viện Node cung cấp giao diện cấp cao để điều khiển Chrome hoặc Chromium qua Giao thức DevTools. Nó được duy trì bởi đội ngũ Chrome của Google và cung cấp cho các nhà phát triển khả năng thực hiện nhiều nhiệm vụ trình duyệt như tạo hình ảnh chụp màn hình, trích xuất dữ liệu từ web, và quan trọng nhất là trích xuất dữ liệu từ web. Puppeteer rất phổ biến nhờ khả năng duyệt web không giao diện (headless browsing), nghĩa là nó có thể chạy mà không cần giao diện người dùng đồ họa, làm cho nó lý tưởng cho các nhiệm vụ tự động hóa.
Nhận mã thưởng CapSolver của bạn
Tăng ngân sách tự động hóa của bạn ngay lập tức!
Sử dụng mã thưởng CAPN khi nạp tiền vào tài khoản CapSolver để nhận thêm 5% thưởng trên mỗi lần nạp tiền — không giới hạn.
Nhận mã thưởng ngay lập tức trong Bảng điều khiển CapSolver
.
Tại sao nên sử dụng Puppeteer cho việc trích xuất dữ liệu từ web?
Axios và Cheerio là những lựa chọn tuyệt vời cho việc trích xuất dữ liệu từ web bằng JavaScript, nhưng chúng có những hạn chế: xử lý nội dung động và vượt qua các cơ chế chống trích xuất dữ liệu.
Là một trình duyệt không giao diện, Puppeteer xuất sắc trong việc trích xuất nội dung động. Nó tải đầy đủ trang đích, thực thi JavaScript và thậm chí có thể kích hoạt các yêu cầu XHR để lấy thêm dữ liệu. Điều này là điều mà các trình trích xuất tĩnh không thể đạt được, đặc biệt là với các ứng dụng Single-Page (SPAs) nơi HTML ban đầu thiếu dữ liệu quan trọng.
Puppeteer có thể làm gì khác? Nó có thể hiển thị hình ảnh, chụp màn hình và có kéo dài để giải các loại CAPTCHA như reCAPTCHA, CAPTCHA, CAPTCHA. Ví dụ, bạn có thể lập trình script của mình để điều hướng qua trang, chụp màn hình tại các khoảng thời gian nhất định và phân tích những hình ảnh đó để có được thông tin cạnh tranh. Khả năng là vô hạn!
Cách sử dụng đơn giản của Puppeteer
Chúng tôi đã hoàn thành phần đầu tiên của ScrapingClub bằng Selenium và Python. Bây giờ, hãy sử dụng Puppeteer để hoàn thành phần hai.

Trước khi bắt đầu, hãy đảm bảo rằng bạn đã cài đặt Puppeteer trên máy tính của mình. Nếu không, bạn có thể cài đặt nó bằng các lệnh sau:
bash
npm i puppeteer # Tải xuống Chrome tương thích trong quá trình cài đặt.
npm i puppeteer-core # Hoặc cài đặt như một thư viện, không tải xuống Chrome.
Truy cập một trang web
javascript
const puppeteer = require('puppeteer');
(async function() {
const browser = await puppeteer.launch({headless: false});
const page = await browser.newPage();
await page.goto('https://scrapingclub.com/exercise/detail_json/');
// Dừng 5 giây
await new Promise(r => setTimeout(r, 5000));
await browser.close();
})();
Phương thức puppeteer.launch được sử dụng để khởi chạy một phiên bản Puppeteer mới và có thể chấp nhận một đối tượng cấu hình với nhiều tùy chọn. Thông số phổ biến nhất là headless, chỉ định xem trình duyệt có chạy ở chế độ không giao diện hay không. Nếu bạn không chỉ định tham số này, nó sẽ mặc định là true. Các tùy chọn cấu hình phổ biến khác như sau:
| Tham số | Kiểu | Giá trị mặc định | Mô tả | Ví dụ |
|---|---|---|---|---|
args |
string[] |
Mảng các tham số dòng lệnh để truyền khi khởi chạy trình duyệt | args: ['--no-sandbox', '--disable-setuid-sandbox'] |
|
debuggingPort |
number |
Chỉ định số cổng gỡ lỗi để sử dụng | debuggingPort: 8888 |
|
defaultViewport |
dict |
{width: 800, height: 600} |
Thiết lập kích thước khung xem mặc định | defaultViewport: {width: 1920, height: 1080} |
devtools |
boolean |
false |
Liệu có tự động mở DevTools hay không | devtools: true |
executablePath |
string |
Chỉ định đường dẫn đến tệp thực thi trình duyệt | executablePath: '/path/to/chrome' |
|
headless |
boolean hoặc 'shell' |
true |
Liệu trình duyệt có chạy ở chế độ không giao diện hay không | headless: false |
userDataDir |
string |
Chỉ định đường dẫn đến thư mục dữ liệu người dùng | userDataDir: '/path/to/user/data' |
|
timeout |
number |
30000 |
Thời gian chờ tính bằng mili giây để đợi trình duyệt khởi động | timeout: 60000 |
ignoreHTTPSErrors |
boolean |
false |
Liệu có bỏ qua lỗi HTTPS hay không | ignoreHTTPSErrors: true |
Thiết lập kích thước cửa sổ
Để đạt được trải nghiệm duyệt web tốt nhất, chúng ta cần điều chỉnh hai tham số: kích thước khung xem và kích thước cửa sổ trình duyệt. Mã là như sau:
javascript
const puppeteer = require('puppeteer');
(async function() {
const browser = await puppeteer.launch({
headless: false,
args: ['--window-size=1920,1080']
});
const page = await browser.newPage();
await page.setViewport({width: 1920, height: 1080});
await page.goto('https://scrapingclub.com/exercise/detail_json/');
// Dừng 5 giây
await new Promise(r => setTimeout(r, 5000));
await browser.close();
})();
Trích xuất dữ liệu
Trong Puppeteer, có nhiều phương pháp để trích xuất dữ liệu.
-
Sử dụng phương thức
evaluatePhương thức
evaluatethực thi mã JavaScript trong ngữ cảnh trình duyệt để trích xuất dữ liệu cần thiết.javascriptconst puppeteer = require('puppeteer'); (async function () { const browser = await puppeteer.launch({ headless: false, args: ['--window-size=1920,1080'] }); const page = await browser.newPage(); await page.setViewport({width: 1920, height: 1080}); await page.goto('https://scrapingclub.com/exercise/detail_json/'); const data = await page.evaluate(() => { const image = document.querySelector('.card-img-top').src; const title = document.querySelector('.card-title').innerText; const price = document.querySelector('.card-price').innerText; const description = document.querySelector('.card-description').innerText; return {image, title, price, description}; }); console.log('Tên sản phẩm:', data.title); console.log('Giá sản phẩm:', data.price); console.log('Hình ảnh sản phẩm:', data.image); console.log('Mô tả sản phẩm:', data.description); // Dừng 5 giây await new Promise(r => setTimeout(r, 5000)); await browser.close(); })(); -
Sử dụng phương thức
$evalPhương thức
$evalchọn một phần tử duy nhất và trích xuất nội dung của nó.javascriptconst puppeteer = require('puppeteer'); (async function () { const browser = await puppeteer.launch({ headless: false, args: ['--window-size=1920,1080'] }); const page = await browser.newPage(); await page.setViewport({width: 1920, height: 1080}); await page.goto('https://scrapingclub.com/exercise/detail_json/'); const title = await page.$eval('.card-title', el => el.innerText); const price = await page.$eval('.card-price', el => el.innerText); const image = await page.$eval('.card-img-top', el => el.src); const description = await page.$eval('.card-description', el => el.innerText); console.log('Tên sản phẩm:', title); console.log('Giá sản phẩm:', price); console.log('Hình ảnh sản phẩm:', image); console.log('Mô tả sản phẩm:', description); // Dừng 5 giây await new Promise(r => setTimeout(r, 5000)); await browser.close(); })(); -
Sử dụng phương thức
$$evalPhương thức
$$evalchọn nhiều phần tử cùng lúc và trích xuất nội dung của chúng.javascriptconst puppeteer = require('puppeteer'); (async function () { const browser = await puppeteer.launch({ headless: false, args: ['--window-size=1920,1080'] }); const page = await browser.newPage(); await page.setViewport({width: 1920, height: 1080}); await page.goto('https://scrapingclub.com/exercise/detail_json/'); const data = await page.$$eval('.my-8.w-full.rounded.border > *', elements => { const image = elements[0].querySelector('img').src; const title = elements[1].querySelector('.card-title').innerText; const price = elements[1].querySelector('.card-price').innerText; const description = elements[1].querySelector('.card-description').innerText; return {image, title, price, description}; }); console.log('Tên sản phẩm:', data.title); console.log('Giá sản phẩm:', data.price); console.log('Hình ảnh sản phẩm:', data.image); console.log('Mô tả sản phẩm:', data.description); // Dừng 5 giây await new Promise(r => setTimeout(r, 5000)); await browser.close(); })(); -
Sử dụng phương thức
page.$vàevaluatePhương thức
page.$chọn các phần tử, và phương thứcevaluatethực thi mã JavaScript trong ngữ cảnh trình duyệt để trích xuất dữ liệu.javascriptconst puppeteer = require('puppeteer'); (async function () { const browser = await puppeteer.launch({ headless: false, args: ['--window-size=1920,1080'] }); const page = await browser.newPage(); await page.setViewport({width: 1920, height: 1080}); await page.goto('https://scrapingclub.com/exercise/detail_json/'); const imageElement = await page.$('.card-img-top'); const titleElement = await page.$('.card-title'); const priceElement = await page.$('.card-price'); const descriptionElement = await page.$('.card-description'); const image = await page.evaluate(el => el.src, imageElement); const title = await page.evaluate(el => el.innerText, titleElement); const price = await page.evaluate(el => el.innerText, priceElement); const description = await page.evaluate(el => el.innerText, descriptionElement); console.log('Tên sản phẩm:', title); console.log('Giá sản phẩm:', price); console.log('Hình ảnh sản phẩm:', image); console.log('Mô tả sản phẩm:', description); // Dừng 5 giây await new Promise(r => setTimeout(r, 5000)); await browser.close(); })();
Bỏ qua các biện pháp chống trích xuất dữ liệu
Hoàn thành các bài tập ScrapingClub tương đối dễ dàng. Tuy nhiên, trong các tình huống trích xuất dữ liệu thực tế, việc lấy dữ liệu không luôn luôn dễ dàng. Một số trang web sử dụng công nghệ chống trích xuất dữ liệu có thể phát hiện script của bạn là bot và chặn nó. Tình huống phổ biến nhất liên quan đến các thử thách CAPTCHA như CAPTCHA, CAPTCHA, reCAPTCHA, CAPTCHA, và CAPTCHA.

Để giải các thử thách CAPTCHA này, bạn cần kinh nghiệm rộng rãi trong học máy, phân tích ngược và các biện pháp đối phó với dấu vân tay trình duyệt, điều này có thể mất một lượng thời gian đáng kể.
Tuy nhiên, bạn không còn cần phải tự xử lý tất cả công việc này nữa. CapSolver cung cấp một giải pháp toàn diện giúp bạn dễ dàng giải quyết tất cả các thách thức. CapSolver cung cấp một tiện ích mở rộng trình duyệt cho phép bạn tự động giải các thử thách CAPTCHA khi sử dụng Puppeteer để trích xuất dữ liệu. Ngoài ra, nó cung cấp phương pháp API để giải CAPTCHA và nhận các token. Tất cả những điều này có thể được thực hiện chỉ trong vài giây. Xem tài liệu này tại đây để tìm hiểu cách giải các thử thách CAPTCHA bạn đã gặp!
Kết luận
Trích xuất dữ liệu từ web là kỹ năng quý giá đối với bất kỳ ai liên quan đến việc trích xuất dữ liệu từ web, và Puppeteer, với giao diện cấp cao và tính năng mạnh mẽ, là một trong những lựa chọn tốt nhất để đạt được mục tiêu này. Khả năng xử lý nội dung động và giải quyết các cơ chế chống trích xuất dữ liệu khiến Puppeteer nổi bật so với các công cụ trích xuất dữ liệu khác.
Trong hướng dẫn này, chúng tôi khám phá Puppeteer là gì, lợi ích của nó trong việc trích xuất dữ liệu từ web và cách thiết lập và sử dụng nó hiệu quả. Chúng tôi minh họa bằng các ví dụ cách truy cập các trang web, thiết lập kích thước khung xem và trích xuất dữ liệu bằng nhiều phương pháp khác nhau. Ngoài ra, chúng tôi thảo luận về các thách thức do công nghệ chống thu thập dữ liệu đặt ra và cách CapSolver cung cấp một giải pháp mạnh mẽ để giải quyết thách thức CAPTCHA.
Câu hỏi thường gặp
1. Puppeteer chủ yếu được sử dụng để làm gì trong việc trích xuất dữ liệu từ web?
Puppeteer được sử dụng để điều khiển trình duyệt Chrome/Chromium thực tế, cho phép nó tải nội dung JavaScript động, hiển thị các trang SPA, tương tác với các phần tử và trích xuất dữ liệu mà các trình trích xuất dựa trên HTTP không thể truy cập được.
2. Puppeteer có thể xử lý các thử thách CAPTCHA trên các trang web không?
Puppeteer riêng lẻ không thể vượt qua CAPTCHA, nhưng khi kết hợp với tiện ích mở rộng hoặc API của CapSolver, nó có thể tự động giải các thử thách reCAPTCHA, hCaptcha, FunCAPTCHA và các thử thách xác minh khác trong các nhiệm vụ trích xuất dữ liệu.
3. Puppeteer có cần chạy với cửa sổ trình duyệt hiển thị không?
Không. Puppeteer hỗ trợ chế độ không giao diện (headless), nơi Chrome chạy mà không cần giao diện người dùng. Chế độ này nhanh hơn và lý tưởng cho tự động hóa. Bạn cũng có thể chạy ở chế độ không headless để gỡ lỗi hoặc giám sát trực quan.
Tuyên bố Tuân thủ: Thông tin được cung cấp trên blog này chỉ mang tính chất tham khảo. CapSolver cam kết tuân thủ tất cả các luật và quy định hiện hành. Việc sử dụng mạng lưới CapSolver cho các hoạt động bất hợp pháp, gian lận hoặc lạm dụng là hoàn toàn bị cấm và sẽ bị điều tra. Các giải pháp giải captcha của chúng tôi nâng cao trải nghiệm người dùng trong khi đảm bảo tuân thủ 100% trong việc giúp giải quyết các khó khăn về captcha trong quá trình thu thập dữ liệu công khai. Chúng tôi khuyến khích việc sử dụng dịch vụ của chúng tôi một cách có trách nhiệm. Để biết thêm thông tin, vui lòng truy cập Điều khoản Dịch vụ và Chính sách Quyền riêng tư.
Thêm

Gỡ mã nguồn trang web với Selenium và Python | Giải Captcha khi gỡ mã nguồn trang web
Trong bài viết này, bạn sẽ làm quen với trích xuất dữ liệu từ web bằng Selenium và Python, và học cách giải mã Captcha liên quan đến quy trình để trích xuất dữ liệu hiệu quả.

Aloísio Vítor
04-Dec-2025

Thu thập dữ liệu từ web trong Golang với Colly
Trong bài viết này, chúng tôi khám phá thế giới của việc trích xuất dữ liệu web bằng Golang với thư viện Colly. Hướng dẫn bắt đầu bằng việc giúp bạn thiết lập dự án Golang và cài đặt gói Colly. Sau đó, chúng tôi hướng dẫn từng bước tạo một công cụ trích xuất cơ bản để trích xuất liên kết từ một trang Wikipedia, minh họa tính dễ sử dụng và tính năng mạnh mẽ của Colly.

Aloísio Vítor
04-Dec-2025

Web Scraping là gì | Các trường hợp sử dụng phổ biến và vấn đề
Tìm hiểu về web scraping: học về lợi ích của nó, giải quyết các thách thức một cách dễ dàng, và nâng cao doanh nghiệp của bạn với CapSolver.

Emma Foster
03-Dec-2025

What là puppeteer và cách sử dụng trong việc thu thập dữ liệu web | Hướng dẫn hoàn chỉnh 2026
Hướng dẫn đầy đủ này sẽ đi sâu vào việc Puppeteer là gì và cách sử dụng nó hiệu quả trong web scraping.

Aloísio Vítor
03-Dec-2025

Cách tạo một trình thu thập dữ liệu web cho AI Agent (Bài hướng dẫn dành cho người mới bắt đầu)
Học cách tạo một trình thu thập dữ liệu AI từ đầu với hướng dẫn dễ hiểu cho người mới. Khám phá các thành phần cốt lõi, ví dụ mã code và cách vượt qua các biện pháp chống bot như CAPTCHAs để thu thập dữ liệu đáng tin cậy.

Anh Tuan
02-Dec-2025

Công cụ Trí tuệ nhân tạo để bỏ chặn web trích xuất dữ liệu | Giải Captcha tự động
AI Web Unlocker tự động hóa việc giải CAPTCHA để truy xuất dữ liệu từ web mượt mà, không gián đoạn và truy cập dữ liệu đáng tin cậy.

Anh Tuan
24-Nov-2025


.