产品集成资源文档定价
立即开始

© 2026 CapSolver. All rights reserved.

联系我们

Slack: lola@capsolver.com

产品

  • reCAPTCHA v2
  • reCAPTCHA v3
  • Cloudflare Turnstile
  • Cloudflare Challenge
  • AWS WAF
  • 浏览器插件
  • 更多验证码类型

集成

  • Selenium
  • Playwright
  • Puppeteer
  • n8n
  • 合作伙伴
  • 查看所有集成

资源

  • 推荐返佣系统
  • 官方文档
  • API 参考
  • 博客
  • 常见问题 (FAQ)
  • 术语表
  • 系统状态

法律声明

  • 服务条款
  • 隐私政策
  • 退款政策
  • 请勿出售我的信息
博客/All/使用 Puppeteer 进行网页抓取:检测网站变化并截图
Oct01, 2024

使用 Puppeteer 进行网页抓取:检测网站变化并截图

Emma Foster

Emma Foster

Machine Learning Engineer

网页抓取已成为自动化数据收集和监控网站变化的必备工具。在这篇博文中,我们将探索如何使用 Puppeteer,一个 Node.js 库,来进行网页抓取、检测网站变化以及截取这些变化的屏幕截图。

什么是 Puppeteer?

Puppeteer 是一个 Node.js 库,它提供了一个高级 API 来通过 DevTools 协议控制无头 Chrome 或 Chromium。它可以用于网页抓取、自动化测试,甚至生成网页的屏幕截图和 PDF。

先决条件

在开始之前,请确保您已安装以下内容:

  • Node.js
  • NPM(与 Node.js 捆绑在一起)

您可以在终端中运行以下命令来安装 Puppeteer:

bash Copy
npm install puppeteer

使用 Puppeteer 进行基本网页抓取

首先,让我们创建一个基本的网页抓取程序,它会导航到网站并提取文本内容。

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

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

    // 导航到网站
    await page.goto('https://example.com');

    // 提取文本内容
    const content = await page.evaluate(() => {
        return document.querySelector('h1').innerText;
    });

    console.log('页面内容:', content);

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

此脚本会打开一个无头浏览器,导航到 example.com,并从 <h1> 元素中提取文本。您可以将 URL 替换为您要抓取的网站,并将选择器调整为与您感兴趣的元素相匹配。

使用 Puppeteer 截取屏幕截图

Puppeteer 允许您轻松地截取网页的屏幕截图。您可以捕获全页屏幕截图或页面的特定区域。

以下是如何截取全页屏幕截图:

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

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

    // 导航到网站
    await page.goto('https://example.com');

    // 截取全页屏幕截图
    await page.screenshot({ path: 'screenshot.png', fullPage: true });

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

此脚本会将整个页面的屏幕截图保存为 screenshot.png。您可以修改 path 以指定不同的文件名或位置。

检测网站变化

监控网站的变化是网页抓取中的一项有用功能。您可以通过反复检查网站的内容并将它与之前保存的版本进行比较来实现这一点。

以下是如何检测文本变化并在内容发生变化时截取屏幕截图的示例:

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

(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('内容已更改!');

        // 保存新内容
        fs.writeFileSync(previousContentPath, currentContent);

        // 截取更改的屏幕截图
        await page.screenshot({ path: `screenshot-${Date.now()}.png`, fullPage: true });
        console.log('屏幕截图已保存!');
    } else {
        console.log('未检测到更改。');
    }

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

在这个例子中:

  • 该脚本会提取 <h1> 元素的内容。
  • 它将当前内容与之前保存的版本 (previous-content.txt) 进行比较。
  • 如果检测到更改,它将截取屏幕截图并将其保存到带有时间戳的文件名中,确保每个屏幕截图都是唯一的。
  • 新内容将保存到 previous-content.txt 中以供将来比较。

定期安排抓取程序运行

您可以使用 Node.js 来安排此脚本使用 node-cron 包按间隔运行。

首先,安装 node-cron:

bash Copy
npm install node-cron

现在,修改您的脚本以便按设定的间隔(例如,每 5 分钟)运行:

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('内容已更改!');
        fs.writeFileSync(previousContentPath, currentContent);
        await page.screenshot({ path: `screenshot-${Date.now()}.png`, fullPage: true });
        console.log('屏幕截图已保存!');
    } else {
        console.log('未检测到更改。');
    }

    await browser.close();
});

此脚本将每 5 分钟 (*/5 * * * *) 运行一次,并检查网站是否存在更改。如果检测到更改,它将截取屏幕截图并记录更新。

附加代码

在 CapSolver 获取顶级验证码解决方案的奖励代码:scrape。兑换后,您每次充值后都会获得额外 5% 的奖励,无限次。

结论

Puppeteer 是一个用于网页抓取和自动化浏览器任务的强大工具。在这篇文章中,我们演示了如何使用 Puppeteer 进行基本的网页抓取、检测网站变化以及捕获这些变化的屏幕截图。使用这些技术,您可以自动监控网站并跟踪更新。请务必检查网站抓取政策,避免违反服务条款。

Copy

查看更多

May 07, 2026

用于网页自动化和验证码解决的最佳人工智能代理框架

比较2026年最佳AI代理框架在网页自动化、验证码解决、合规性和生产就绪代理工作流程中的表现。

Ethan Collins
Ethan Collins
May 07, 2026

最佳Java网络爬虫库用于可靠的数据提取

比较最佳的Java网络爬虫库,包括jsoup、Selenium、Playwright(用于Java)、HtmlUnit、Apache Nutch和API选项。

Ethan Collins
Ethan Collins

目录

May 06, 2026

如何通过Hermes Agent和CapSolver解决浏览器自动化中的CAPTCHA

学习如何使用Hermes Agent和CapSolver在AI浏览器自动化工作流程中解决CAPTCHA。本指南解释了如何集成CapSolver,以在无需编写复杂代码的情况下自动处理reCAPTCHA、hCaptcha和其他现代验证码系统。

Ethan Collins
Ethan Collins
May 06, 2026

如何在无需浏览器的情况下解决AWS WAF挑战:技术指南

学习如何在无需浏览器的情况下解决 AWS WAF 挑战和验证码。使用 CapSolver 的 API 生成令牌并绕过 405 状态码。

Ethan Collins
Ethan Collins