验证码自动识别

当需要爬取的网页需要输入验证码才能访问的时候, 该怎么办呢? 这个问题, 使用神箭手提供的验证码自动识别服务就能解决.

点此查看神箭手支持的可自动识别的验证码类型以及计费规则.

注意: 验证码自动识别是付费功能, 在使用前请先确保你的账户有足够的余额, 否则会影响使用.

验证码自动识别所调用的函数请参考solveCaptcha, solveCaptchaFromBase64solveGeetest.

通用栗子:

当输入Base64编码的验证码才能爬取到某网页的数据时, 先调用solveCaptchaFromBase64函数得到验证码数据, 再通过发送POST请求得到网页数据, 执行以下代码:

configs.afterDownloadPage = function(page, site) {
// 验证码图片url
var url = "https://checkcoverage.apple.com/gc?t=image&timestamp=";
// 得到验证码图片的Base64编码
var captchaImage = site.requestUrl(url + new Date().getTime());
var captchaObject = JSON.parse(captchaImage);
var imgBase64 = captchaObject.binaryValue;
// 得到Base64编码的验证码数据, 是JS对象,
// 验证码类型是53(1-5位不定长数字英文混合)
var imgCaptchaData = solveCaptchaFromBase64(imgBase64, 53);
if (imgCaptchaData == null) {
return page;
}
// 判断是否成功得到验证码数据
if (imgCaptchaData.ret < 0) {
return page;
}
var reg = /csrfToken: \"([0-9a-zA-Z-]+)"/;
var result = reg.exec(page.raw);
page.url = "https://checkcoverage.apple.com/cn/zh/?sn=FK1QPNCEGRYD";
var options = {
method: "POST",
data: {
sno: "FK1QPNCEGRYD",
// 将验证码赋值给"data.ans"
ans: imgCaptchaData.result,
captchaMode: "image",
CSRFToken: result[1]
}
};
url = "https://checkcoverage.apple.com/cn/zh/?sn=FK1QPNCEGRYD";
// 自动识别的验证码作为"POST"请求参数之一发送请求获取返回内容
page.raw = site.requestUrl(url, options);
return page;
};