CAPSOLVER
Blog
Lấy dữ liệu từ web bằng Puppeteer: Phát hiện thay đổi trang web và chụp ảnh màn hình

Web Scraping với Puppeteer: Phát hiện thay đổi website và chụp ảnh màn hình

Logo of CapSolver

Anh Tuan

Data Science Expert

07-Oct-2024

Web scraping đã trở thành một công cụ cần thiết để tự động hóa việc thu thập dữ liệu và theo dõi các thay đổi trên trang web. Trong bài đăng trên blog này, chúng ta sẽ khám phá cách sử dụng Puppeteer, một thư viện Node.js, để web scraping, phát hiện các thay đổi trên trang web và chụp ảnh màn hình những thay đổi đó.

Puppeteer là gì?

Puppeteer là một thư viện Node.js cung cấp API cấp cao để kiểm soát Chrome hoặc Chromium không có đầu qua giao thức DevTools. Nó có thể được sử dụng cho web scraping, thử nghiệm tự động, hoặc thậm chí tạo ảnh chụp màn hình và PDF của trang web.

Điều kiện tiên quyết

Trước khi bắt đầu, hãy đảm bảo bạn đã cài đặt những thứ sau:

Bạn có thể cài đặt Puppeteer bằng cách chạy lệnh sau trong terminal của mình:

bash Copy
npm install puppeteer

Web scraping cơ bản với Puppeteer

Để bắt đầu, chúng ta hãy tạo một web scraper cơ bản điều hướng đến một trang web và trích xuất nội dung văn bản.

javascript Copy
const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();

    // Điều hướng đến trang web
    await page.goto('https://example.com');

    // Trích xuất nội dung văn bản
    const content = await page.evaluate(() => {
        return document.querySelector('h1').innerText;
    });

    console.log('Nội dung trang:', content);

    await browser.close();
})();

Kịch bản này mở một trình duyệt không có đầu, điều hướng đến example.com và trích xuất văn bản từ phần tử <h1>. Bạn có thể thay thế URL bằng trang web bạn muốn scraping và điều chỉnh bộ chọn để phù hợp với phần tử bạn quan tâm.

Chụp ảnh màn hình với Puppeteer

Puppeteer cho phép bạn chụp ảnh màn hình của các trang web một cách dễ dàng. Bạn có thể chụp ảnh màn hình toàn trang hoặc các khu vực cụ thể trên trang.

Dưới đây là cách chụp ảnh màn hình toàn trang:

javascript Copy
const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();

    // Điều hướng đến trang web
    await page.goto('https://example.com');

    // Chụp ảnh màn hình toàn trang
    await page.screenshot({ path: 'screenshot.png', fullPage: true });

    await browser.close();
})();

Kịch bản này lưu ảnh chụp màn hình của toàn bộ trang dưới dạng screenshot.png. Bạn có thể sửa đổi path để chỉ định tên tệp hoặc vị trí khác.

Phát hiện thay đổi trang web

Theo dõi thay đổi trên trang web là một tính năng hữu ích trong web scraping. Bạn có thể đạt được điều này bằng cách liên tục kiểm tra nội dung của trang web và so sánh nó với phiên bản đã lưu trước đó.

Dưới đây là một ví dụ về việc phát hiện thay đổi văn bản và chụp ảnh màn hình nếu nội dung thay đổi:

javascript Copy
const puppeteer = require('puppeteer');
const fs = require('fs');

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();

    // Điều hướng đến trang web
    await page.goto('https://example.com');

    // Trích xuất nội dung văn bản
    const currentContent = await page.evaluate(() => {
        return document.querySelector('h1').innerText;
    });

    const previousContentPath = 'previous-content.txt';
    let previousContent = '';

    // Kiểm tra xem nội dung trước đó có tồn tại hay không
    if (fs.existsSync(previousContentPath)) {
        previousContent = fs.readFileSync(previousContentPath, 'utf8');
    }

    // So sánh nội dung hiện tại với nội dung trước đó
    if (currentContent !== previousContent) {
        console.log('Nội dung đã thay đổi!');

        // Lưu nội dung mới
        fs.writeFileSync(previousContentPath, currentContent);

        // Chụp ảnh màn hình về sự thay đổi
        await page.screenshot({ path: `screenshot-${Date.now()}.png`, fullPage: true });
        console.log('Ảnh chụp màn hình đã được lưu!');
    } else {
        console.log('Không phát hiện thay đổi.');
    }

    await browser.close();
})();

Trong ví dụ này:

  • Kịch bản trích xuất nội dung của phần tử <h1>.
  • Nó so sánh nội dung hiện tại với phiên bản đã lưu trước đó (previous-content.txt).
  • Nếu phát hiện thay đổi, nó sẽ chụp ảnh màn hình và lưu nó với dấu thời gian trong tên tệp, đảm bảo mỗi ảnh chụp màn hình là duy nhất.
  • Nội dung mới được lưu vào previous-content.txt để so sánh trong tương lai.

Lên lịch cho scraper chạy thường xuyên

Bạn có thể sử dụng Node.js để lên lịch cho kịch bản này chạy theo khoảng thời gian bằng cách sử dụng gói node-cron.

Đầu tiên, cài đặt node-cron:

bash Copy
npm install node-cron

Bây giờ, hãy sửa đổi kịch bản của bạn để chạy theo khoảng thời gian đã đặt (ví dụ: cứ 5 phút một lần):

javascript Copy
const puppeteer = require('puppeteer');
const fs = require('fs');
const cron = require('node-cron');

cron.schedule('*/5 * * * *', async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();

    await page.goto('https://example.com');

    const currentContent = await page.evaluate(() => {
        return document.querySelector('h1').innerText;
    });

    const previousContentPath = 'previous-content.txt';
    let previousContent = '';

    if (fs.existsSync(previousContentPath)) {
        previousContent = fs.readFileSync(previousContentPath, 'utf8');
    }

    if (currentContent !== previousContent) {
        console.log('Nội dung đã thay đổi!');
        fs.writeFileSync(previousContentPath, currentContent);
        await page.screenshot({ path: `screenshot-${Date.now()}.png`, fullPage: true });
        console.log('Ảnh chụp màn hình đã được lưu!');
    } else {
        console.log('Không phát hiện thay đổi.');
    }

    await browser.close();
});

Kịch bản này sẽ chạy cứ sau 5 phút (*/5 * * * *) và kiểm tra xem có thay đổi nào trên trang web hay không. Nếu phát hiện thay đổi, nó sẽ chụp ảnh màn hình và ghi nhật ký cập nhật.

Mã thưởng

Nhận Mã thưởng của bạn cho các giải pháp captcha hàng đầu tại CapSolver: scrape. Sau khi đổi mã, bạn sẽ nhận được thêm 5% tiền thưởng sau mỗi lần nạp tiền, không giới hạn lần.

Kết luận

Puppeteer là một công cụ mạnh mẽ cho web scraping và tự động hóa các tác vụ trình duyệt. Trong bài đăng này, chúng ta đã chứng minh cách sử dụng Puppeteer cho web scraping cơ bản, phát hiện thay đổi trang web và chụp ảnh màn hình những thay đổi đó. Với những kỹ thuật này, bạn có thể theo dõi các trang web và theo dõi các cập nhật một cách tự động. Hãy chắc chắn kiểm tra chính sách web scraping để tránh vi phạm các điều khoản dịch vụ.

Copy

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

phần mở rộng tốt nhất để giải CAPTCHA 2026
Tiện ích tốt nhất để giải CAPTCHA 2026 là gì?

Trong thế giới an ninh trực tuyến không ngừng phát triển, các thách thức CAPTCHA đã trở thành rào cản phổ biến đối với người dùng internet...

Extension
Logo of CapSolver

Ethan Collins

12-Dec-2025

Đăng nhập Gen
Genlogin: Đổi mới Trải nghiệm Tự động hóa Web

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

Partners
Logo of CapSolver

Rajinder Singh

12-Dec-2025

ProxysIO
Proxys.io: Proxy riêng lẻ cho bất kỳ nhiệm vụ nào

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

Partners
Logo of CapSolver

Lucas Mitchell

12-Dec-2025

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

IP2Thế giới
IP2World Proxy Nhà Ở: Giải pháp IP proxy toàn cầu hàng đầu

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

Partners
Logo of CapSolver

Ethan Collins

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