返回

突破难关:使用 Node.js + Puppeteer 破解验证码,从快递公司网站抓取订单数据

前端

你是否需要从某个网站上抓取数据,但是遇到了讨厌的验证码,阻止了你前进的脚步?如果是的话,那么你并不孤单。验证码是一种常见的安全措施,用于防止机器人窃取网站上的数据。但是,有时候验证码也会给合法用户带来不便。

在这个教程中,我们将向你展示如何使用 Node.js 和 Puppeteer 库来破解验证码,并从快递公司网站上抓取订单数据。

先决条件

为了完成本教程,你需要满足以下先决条件:

  • Node.js 已安装
  • Puppeteer 已安装
  • 一个快递公司网站的用户名和密码

步骤 1:创建 Node.js 项目

首先,创建一个新的 Node.js 项目:

mkdir my-project
cd my-project
npm init -y

步骤 2:安装 Puppeteer

接下来,你需要安装 Puppeteer:

npm install puppeteer

步骤 3:编写脚本

现在,你可以编写一个脚本来破解验证码并抓取数据了。这里有一个示例脚本:

const puppeteer = require('puppeteer');

(async () => {
  // 启动浏览器
  const browser = await puppeteer.launch();

  // 打开快递公司网站
  const page = await browser.newPage();
  await page.goto('https://www.example.com/login');

  // 输入用户名和密码
  await page.type('input[name="username"]', 'your_username');
  await page.type('input[name="password"]', 'your_password');

  // 点击登录按钮
  await page.click('button[type="submit"]');

  // 等待页面加载
  await page.waitForNavigation();

  // 找到验证码元素
  const captchaElement = await page.$('div[class="captcha"]');

  // 获取验证码图片的 URL
  const captchaImageUrl = await captchaElement.$eval('img', img => img.src);

  // 下载验证码图片
  const response = await page.goto(captchaImageUrl);
  const buffer = await response.buffer();

  // 使用第三方库破解验证码
  const captchaSolver = require('2captcha');
  const captchaId = await captchaSolver.solve(buffer);

  // 将破解出的验证码输入到验证码输入框
  await page.type('input[name="captcha"]', captchaId);

  // 提交验证码
  await page.click('button[type="submit"]');

  // 等待页面加载
  await page.waitForNavigation();

  // 获取订单数据
  const orderData = await page.$eval('table tbody tr', rows => {
    return rows.map(row => {
      return {
        orderId: row.querySelector('td:nth-child(1)').textContent,
        orderDate: row.querySelector('td:nth-child(2)').textContent,
        orderAmount: row.querySelector('td:nth-child(3)').textContent,
        orderStatus: row.querySelector('td:nth-child(4)').textContent
      };
    });
  });

  // 打印订单数据
  console.log(orderData);

  // 关闭浏览器
  await browser.close();
})();

步骤 4:运行脚本

最后,你可以运行脚本:

node index.js

脚本运行后,它将自动破解验证码,并从快递公司网站上抓取订单数据。

总结

在本教程中,我们向你展示了如何使用 Node.js 和 Puppeteer 库来破解验证码,并从快递公司网站上抓取订单数据。希望本教程对你有帮助!