如何在2025年解决网页抓取中的图片验证码:详细指南与最佳推荐
图片验证码是最流行的网站保护技术之一。尽管最近,关注点转向了隐形验证方法——通常,人类验证在后台进行,用户可能甚至没有注意到网站有保护措施。然而,图片验证码仍然被广泛使用,特别是在后台验证失败的情况下——系统怀疑用户并请求额外的视觉检查,像reCAPTCHA就是一个例子。
在网页抓取和其他互联网相关任务中,遇到这个障碍是很常见的。然而,了解如何绕过验证码并使用正确的工具,可以让网站数据提取变得更加顺畅。在本文中,我们将探讨什么是图片验证码、它们的类型以及如何在网页抓取中处理它们。
图片验证码(Image CAPTCHA)是一种机器人验证方法,用户必须完成与图片相关的任务。这可能包括选择特定物体(例如,汽车或交通灯)、输入扭曲图像中的字符、拼装拼图或将图像碎片旋转到正确位置。
在使用互联网时,您可能会遇到各种类型的图片验证码。让我们来看看最常见的几种:
这是谷歌的经典验证码,用户需要点击“我不是机器人”。如果算法信任用户,验证码会立即被认为已解决。否则,会出现基于图像的测试。


这种类型的验证码要求用户从图像中解读文本并将其输入到一个字段中。

ComplexImage验证码是一种图片验证码,用户必须完成一个非标准任务。它比普通的图片验证码更具挑战性,因为它要求分析、移动或更改图像中的元素。让我们来看一些这样的任务示例:
- 图像旋转(Rotate CAPTCHA)
用户需要将图像旋转到正确的方向:


- 物体选择
用户需要点击特定物体,选择所有属于某一类型的项目(例如,动物、水果等)。或者,如本例所示,找到所有带有指定数字的方块:

- 拼图验证码
用户需要将图像的一部分拖动到正确的位置:

是的,所有这些类型的检查都很难自动绕过,但幸运的是,有像CapMonster Cloud这样的专用服务可以轻松快捷地处理这个任务。要将您的抓取工具与CapMonster Cloud集成,只需从您的个人账户获取API密钥,并创建一个任务来解决并从服务器接收结果。您还可以直接在浏览器中绕过这些检查——只需下载并安装适用于Chrome或Firefox的扩展程序。
我们的服务通过两种方法解决reCAPTCHA V2——令牌方法和点击方法:
- 令牌方法 – 您将获得一个已准备好的g-recaptcha-response,可以直接插入到表单中并提交。该方法更快且更方便用于自动化和脚本。
- 点击方法 – 在此方法中,模拟用户行为:点击“我不是机器人”复选框,解决额外的任务(如果出现),并确认验证码。如果需要模拟真实用户行为,此方法非常有用。
根据选择的方法,您需要正确创建任务。以下是一个创建任务并获取令牌方法结果的请求示例:
POST https://api.capmonster.cloud/createTask
{
"clientKey":"API_KEY",
"task": {
"type":"RecaptchaV2TaskProxyless",
"websiteURL":"https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=high",
"websiteKey":"6Lcg7CMUAAAAANphynKgn9YAgA4tQ2KI_iqRyTwd"
}
}
您需要指定验证码类型(是否使用代理)、带有验证码的目标页面,以及websiteKey——一个特殊的验证码标识符密钥。在这里,您可以找到有关如何定位该密钥的详细指南。
POST https://api.capmonster.cloud/getTaskResult
{
"clientKey":"API_KEY",
"taskId": 407533072
}
要获取结果,向https://api.capmonster.cloud/getTaskResult发送请求,并附上您的API密钥和任务的taskId。
现在,让我们提供一个使用点击方法解决并接收结果的请求示例:
POST https://api.capmonster.cloud/createTask
{
"clientKey":"API_KEY",
"task": {
"type": "ComplexImageTask",
"class": "recaptcha",
"imageUrls":[ "https://i.postimg.cc/yYjg75Kv/payloadtraffic.jpg" ],
"metadata": {
"Task": "Click on traffic lights",
"Grid": "3x3",
"TaskDefinition": "/m/015qff"
},
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36",
"websiteUrl": "https://lessons.zennolab.com/captchas/recaptcha/v2_simple.php?level=middle"
}
}
在这里,您需要指定一些重要参数,如:
imageUrls – 验证码图像的URL(它可以是3x3、4x4或1x1网格)。例如:[“https://i.postimg.cc/yYjg75Kv/img1.jpg”],其显示如下:

imagesBase64(如果未填写imageUrls) – 以base64格式提供完整的图像,包含4x4、3x3或1x1网格(以数组形式)。例如:[“/9j/4AAQSkZJRgABAQEAAAAAAAD…”]
Task – 验证码的任务指令(例如,选择所有的交通灯)。
Grid – 网格大小(例如3x3)。它也可以是4x4等其他尺寸。
TaskDefinition(如果未填写Task) – 需要找到的对象代码(例如,“/m/015qff”表示“交通灯”)。其他示例可能是“/m/02y864”代表公交车,“/m/0k4j”代表摩托车等。这个参数可以在开发者工具中找到:

此外,您可以(但不是必需的)指定当前的userAgent和包含验证码的页面URL。
让我们看一个创建请求并接收解决ImageToText验证码结果的示例:
POST https://api.capmonster.cloud/createTask
{
"clientKey":"API_KEY",
"task": {
"type":"ImageToTextTask",
"body":"BASE64_BODY_HERE!"
}
}
POST https://api.capmonster.cloud/getTaskResult
{
"clientKey":"API_KEY",
"taskId": 407533072
}
对于这种类型,您需要发送以base64编码的图像。您可以通过多种方式获取这些数据,以下是如何直接从浏览器控制台获取base64的示例:
async function getBase64FromImageUrl(url) {
const response = await fetch(url);
const blob = await response.blob();
const reader = new FileReader();
return new Promise((resolve) => {
reader.onloadend = () => resolve(reader.result.split(",")[1]);
reader.readAsDataURL(blob);
});
}
getBase64FromImageUrl("https://example.com/captcha.jpg").then(console.log);
要解决此类任务,您主要需要验证码中所有图像的base64参数。让我们看一个Betpunch验证码的请求示例,其中用户需要将图像旋转到正确的方向。首先,我们找到所有图像的base64,并按以下顺序传递它们:

示例请求:
{
"clientKey": "API_KEY",
"task": {
"type": "ComplexImageTask",
"class": "recognition",
"imagesBase64": [
"{image_1_Base64}",
"{image_2_Base64}",
"{image_3_Base64}",
"{image_4_Base64}",
"{image_5_Base64}",
"{image_6_Base64}",
"{image_7_Base64}",
"{image_8_Base64}",
"{image_9_Base64}",
],
"metadata": {
"Task": "betpunch_3x3_rotate"
}
}
}
在“Task”字段中,指定 betpunch_3x3_rotate。要获取结果,使用 getTaskResult 方法,如前面的示例所示。响应中,如果解决成功,您将收到一个数字数组,表示验证码的解决方案。此JSON响应应用于确认解决方案。以下是如何使用Selenium实现这一点的示例:
from selenium import webdriver
# 使用JSON响应的示例:
rotation_values = [4,4,4,4,4,3,1,2,2]
# 然后使用Selenium进行点击或数据输入
我们已经介绍了使用CapMonster Cloud自动解决图片验证码的主要步骤。然而,您可以进一步简化这个过程并使其更加方便。让我们来看一些有用的建议:
CapMonster Cloud提供了自己的开发者库,相比使用标准HTTP库,显著减少了代码量。它们支持多种编程语言,包括Python、JavaScript、C#等。这使得不同技术栈的开发者能够方便地进行集成。通过现成的任务创建和结果接收方法,开发者不需要编写复杂的HTTP请求、长时间处理响应或管理超时。这简化了与服务的工作过程并提高了代码的稳定性。您可以在文档中找到示例和集成模板。
在点击方法中,手动查找和提取请求CapMonster Cloud所需的参数非常不方便。在这种情况下,可以使用自动化工具,例如Selenium。脚本将自动找到任务文本(例如,“点击交通灯”)、确定网格大小(3x3或4x4),并提取图像URL。这些数据随后传递给CapMonster Cloud来解决验证码。这种方法显著加快了解决过程。
一些网站可能会阻止来自同一IP地址的所有请求解决验证码。使用代理可以帮助避免这种情况,提供更高的匿名性,并增加成功通过验证码的机会。使用高速度的可靠代理;如果网站检查位置,请选择地理位置合适的IP地址。
为了加快验证码处理速度,您可以并行发送多个任务。建议将解决方案分解为单独的线程(多线程),使用异步请求(例如Python中的asyncio),并减少请求之间的延迟,但避免使请求过于频繁,以免被封锁。
通过遵循本文中概述的主要步骤和建议,您将能够显著简化验证码解决过程,减少被封锁的可能性,并加速数据收集。如果您有任何问题或想了解更多具体方法,我们建议您查看官方的CapMonster Cloud文档,并尝试实践中的集成!
注意: 我们提醒您,该产品用于在您自己的网站以及您拥有合法访问权限的网站上进行自动化测试。