CAPSOLVER
Blog
Puppeteer là gì và cách sử dụng trong việc quét web | Hướng dẫn đầy đủ 2024

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

Logo of CapSolver

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 Copy
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 Copy
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 Copy
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.

  1. Sử dụng phương thức evaluate

    Phương thức evaluate thực thi mã JavaScript trong ngữ cảnh trình duyệt để trích xuất dữ liệu cần thiết.

    javascript Copy
    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/');
    
        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();
    })();
  2. Sử dụng phương thức $eval

    Phương thức $eval chọn một phần tử duy nhất và trích xuất nội dung của nó.

    javascript Copy
    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/');
    
        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();
    })();
  3. Sử dụng phương thức $$eval

    Phương thức $$eval chọn nhiều phần tử cùng lúc và trích xuất nội dung của chúng.

    javascript Copy
    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/');
    
        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();
    })();
  4. Sử dụng phương thức page.$evaluate

    Phương thức page.$ chọn các phần tử, và phương thức evaluate thực thi mã JavaScript trong ngữ cảnh trình duyệt để trích xuất dữ liệu.

    javascript Copy
    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/');
    
        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

Tabproxy
Tabproxy: Dịch vụ proxy nhà ở giá trị tốt cho khu vực nước ngoài

Trong bài viết này, chúng tôi sẽ giới thiệu cho bạn Tabproxy là gì và các dịch vụ mà họ cung cấp.

web scraping
Logo of CapSolver

Anh Tuan

12-Dec-2025

lỗi trích xuất dữ liệu từ web
Các lỗi 402, 403, 404 và 429 là gì trong việc quét web? Hướng dẫn toàn diện

Nắm vững xử lý lỗi quét web bằng cách hiểu các lỗi 402, 403, 404 và 429. Học cách sửa lỗi 403 Cấm, triển khai giải pháp xử lý lỗi 429 và xử lý mã trạng thái 402 Yêu cầu thanh toán mới xuất hiện.

web scraping
Logo of CapSolver

Lucas Mitchell

12-Dec-2025

Trích xuất dữ liệu từ web bằng Python
Web Scraping Với Python: 2026 Các Chiến Thuật Tốt Nhất

Học các chiến thuật hàng đầu về quét web bằng Python năm 2026, bao gồm xử lý nội dung JavaScript động, quản lý các luồng xác thực, giải CAPTCHAs, nhận diện các bẫy ẩn, mô phỏng hành vi của con người, tối ưu hóa các mẫu yêu cầu và giảm tiêu thụ tài nguyên trong các dự án quét web quy mô lớn.

web scraping
Logo of CapSolver

Emma Foster

12-Dec-2025

Giải quyết Captcha khi quét trang web
Thu thập dữ liệu web mà không bị chặn và cách giải Captcha

Quét web đã trở thành kỹ thuật phổ biến để trích xuất dữ liệu từ trang web. Tuy nhiên, nhiều trang web sử dụng các biện pháp chống quét web, bao gồm...

web scraping
Logo of CapSolver

Nikolai Smirnov

11-Dec-2025

Crawling web và Trích xuất dữ liệu web
Khác biệt cơ bản giữa Khám phá web và Trích xuất web

Khám phá sự khác biệt cơ bản giữa quét web và trích xuất dữ liệu web. Tìm hiểu mục đích khác nhau của chúng, 10 trường hợp sử dụng mạnh mẽ, và cách CapSolver giúp vượt qua các rào cản AWS WAF và CAPTCHA để thu thập dữ liệu mượt mà.

web scraping
Logo of CapSolver

Anh Tuan

09-Dec-2025

Cách giải Captchas khi web scraping với Scrapling và CapSolver
Cách giải Captchas khi quét web bằng Scrapling và CapSolver

Scrapling + CapSolver cho phép quét trang web tự động với việc vượt qua ReCaptcha v2/v3 và Cloudflare Turnstile.

web scraping
Logo of CapSolver

Anh Tuan

05-Dec-2025