返回
突破难关:使用 Node.js + Puppeteer 破解验证码,从快递公司网站抓取订单数据
前端
2023-09-26 16:15:06
你是否需要从某个网站上抓取数据,但是遇到了讨厌的验证码,阻止了你前进的脚步?如果是的话,那么你并不孤单。验证码是一种常见的安全措施,用于防止机器人窃取网站上的数据。但是,有时候验证码也会给合法用户带来不便。
在这个教程中,我们将向你展示如何使用 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 库来破解验证码,并从快递公司网站上抓取订单数据。希望本教程对你有帮助!