如何使用Python和Selenium解决reCAPTCHA

news2024/11/13 8:54:59

在这里插入图片描述

CAPTCHA已成为我们日常在线活动中重要的防御线。无论是登录账户、提交表单还是进行在线支付,CAPTCHA都在幕后保护我们的安全。然而,CAPTCHA有时可能会成为自动化的绊脚石,阻碍自动化测试、数据收集和效率提升。那么,如何以合法合理的方式绕过这些复杂的CAPTCHA挑战呢?在本文中,我们将深入探讨如何使用Python和Selenium解决reCAPTCHA,为开发人员和数据科学家提供一条高效的解决方案。

什么是reCAPTCHA?

reCAPTCHA是由Google开发的一项安全服务,用于保护网站免受垃圾邮件和滥用。它能区分人类用户和自动化机器人,确保表单提交、账户创建和登录尝试等交互是由真实的人执行的。reCAPTCHA使用各种挑战来验证用户的真实性,从简单的复选框到复杂的图像识别都有。

反复解决烦人的验证码却总是失败?使用CapSolver的AI驱动自动网页解锁技术,体验无缝的自动验证码解决方案!

获取顶级验证码解决方案的优惠码; CapSolver: WEBS。兑换后,每次充值都可获得额外5%的奖励,无限制。

reCAPTCHA的类型

  1. reCAPTCHA v2 (复选框): 用户会看到一个标有"我不是机器人"的复选框。点击复选框后,如果系统怀疑用户可能是机器人,可能会要求用户解决基于图像的挑战。
    [外链图片转存中…(img-adPpGWjx-1721887563579)]

  2. reCAPTCHA v2 (隐形): 这个版本不显示可见的复选框。它在后台运行,只有在检测到可疑活动时才触发挑战。

  3. reCAPTCHA v3: 与之前的版本不同,reCAPTCHA v3不会用挑战打断用户。相反,它根据用户行为分配一个分数,让网站管理员决定采取必要的行动。

  4. reCAPTCHA Enterprise: 一个为大型企业设计的更高级版本,提供更高的安全性和可定制性。

为什么要解决reCAPTCHA?

在某些合法场景下,解决reCAPTCHA是必要的:

  1. 自动化测试: 开发人员和测试人员可能需要解决reCAPTCHA来自动化测试他们的Web应用程序。
  2. 数据抓取: 当抓取自己的数据或在有权限的网站上执行任务时,解决reCAPTCHA可能至关重要。
  3. 无障碍访问: 为残障用户自动化重复任务或提供替代访问方法可能需要解决reCAPTCHA。
  4. 效率: 自动化使用reCAPTCHA的网站上的交互可以显著提高生产力和效率。

如何使用CapSolver解决reCAPTCHA

reCAPTCHA可能会给合法的自动化任务(如数据收集、测试自动化等)造成许多障碍。因此,为了彻底解决这些问题,建议开发人员使用第三方解决服务,如CapSolver。它可以自动解决多种类型的CAPTCHA问题,帮助开发人员克服这些障碍,使任务顺利运行。

1. 前提条件

  • 确认目标网站使用reCAPTCHA
    你通常可以在页面上看到明显的特征

在这里插入图片描述

在请求日志中,你还会看到https://www.google.com/recaptcha****

  • 获取网站密钥
    对于V2和V3,你可以在浏览器请求日志中搜索/recaptcha/api2/reload?k=6LcR_okUAAAAAPYrPe-HK_0RULO1aZM15ENyM-Mf,其中k=后面的值就是我们需要的密钥

  • 区分V2和V3
    V2和V3有不同的处理方法。V2需要图像识别来选择答案,而V3相对不引人注目;但是,V3在验证时需要提供一个Action。根据之前获得的密钥值,搜索响应页面,你会在页面中找到Action值
    在这里插入图片描述

  • 调用CapSolver服务

2. 区分reCAPTCHA版本

  • 在浏览器请求日志中,你可以看到对于V2,在/recaptcha/api2/reload请求之后,通常需要一个/recaptcha/api2/userverify请求来获取通过令牌;
  • 对于V3,/recaptcha/api2/reload请求可以直接获取通过令牌

3. CapSolver API调用的完整示例

  • Python reCAPTCHA V2
# pip install requests
import requests
import time

# TODO: 设置你的配置
api_key = "YOUR_API_KEY"  # 你的capsolver api密钥
site_key = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"  # 你的目标网站的site key
site_url = "https://www.google.com/recaptcha/api2/demo"  # 你的目标网站的页面url

# site_key = "6LelzS8UAAAAAGSL60ADV5rcEtK0x0lRsHmrtm62"
# site_url = "https://mybaragar.com/index.cfm?event=page.SchoolLocatorPublic&DistrictCode=BC45"


def capsolver():
    payload = {
        "clientKey": api_key,
        "task": {
            "type": 'ReCaptchaV2TaskProxyLess',
            "websiteKey": site_key,
            "websiteURL": site_url
        }
    }
    res = requests.post("https://api.capsolver.com/createTask", json=payload)
    resp = res.json()
    task_id = resp.get("taskId")
    if not task_id:
        print("创建任务失败:", res.text)
        return
    print(f"获得taskId: {task_id} / 正在获取结果...")

    while True:
        time.sleep(3)  # 延迟
        payload = {"clientKey": api_key, "taskId": task_id}
        res = requests.post("https://api.capsolver.com/getTaskResult", json=payload)
        resp = res.json()
        status = resp.get("status")
        if status == "ready":
            return resp.get("solution", {}).get('gRecaptchaResponse')
        if status == "failed" or resp.get("errorId"):
            print("解决失败! 响应:", res.text)
            return


token = capsolver()
print(token)

  • Python reCAPTCHA V3
# pip install requests
import requests
import time

# TODO: 设置你的配置
api_key = "YOUR_API_KEY"  # 你的capsolver api密钥

site_key = "6LcR_okUAAAAAPYrPe-HK_0RULO1aZM15ENyM-Mf"  # 你的目标网站的site key
site_url = "https://antcpt.com/score_detector/"  # 你的目标网站的页面url


def capsolver():
    payload = {
        "clientKey": api_key,
        "task": {
            "type": 'ReCaptchaV3TaskProxyLess',
            "websiteKey": site_key,
            "websiteURL": site_url,
            "pageAction": "homepage",
        }
    }
    res = requests.post("https://api.capsolver.com/createTask", json=payload)
    resp = res.json()
    task_id = resp.get("taskId")
    if not task_id:
        print("创建任务失败:", res.text)
        return
    print(f"获得taskId: {task_id} / 正在获取结果...")

    while True:
        time.sleep(1)  # 延迟
        payload = {"clientKey": api_key, "taskId": task_id}
        res = requests.post("https://api.capsolver.com/getTaskResult", json=payload)
        resp = res.json()
        status = resp.get("status")
        if status == "ready":
            return resp.get("solution", {}).get('gRecaptchaResponse')
        if status == "failed" or resp.get("errorId"):
            print("解决失败! 响应:", res.text)
            return

# 验证分数
def score_detector(token):
    headers = {
        "accept": "application/json, text/javascript, */*; q=0.01",
        "accept-language": "fr-CH,fr;q=0.9",
        "content-type": "application/json",
        "origin": "https://antcpt.com",
        "priority": "u=1, i",
        "referer": "https://antcpt.com/score_detector/",
        "sec-ch-ua": "\"Not/A)Brand\";v=\"8\", \"Chromium\";v=\"126\", \"Google Chrome\";v=\"126\"",
        "sec-ch-ua-mobile": "?0",
        "sec-ch-ua-platform": "\"macOS\"",
        "sec-fetch-dest": "empty",
        "sec-fetch-mode": "cors",
        "sec-fetch-site": "same-origin",
        "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
        "x-requested-with": "XMLHttpRequest"
    }
    url = "https://antcpt.com/score_detector/verify.php"
    data = {
        "g-recaptcha-response": token
    }
    data = json.dumps(data, separators=(',', ':'))
    response = requests.post(url, headers=headers, data=data)

    print(response.json())
    print(response)

token = capsolver()
print(token)

...
...
{
    'success': True, 
    'challenge_ts': '2024-07-19T10:50:56Z', 
    'hostname': 'antcpt.com', 
    'score': 0.7, 
    'action': 'homepage'
}

结论

使用Python、Selenium和CapSolver等服务来解决reCAPTCHA为合法的自动化任务提供了一个有效的解决方案。这种方法简化了自动化测试、数据收集和改善可访问性等过程,同时显著提高了效率。

需要记住的要点:

  1. 了解不同类型的reCAPTCHA及其机制。
  2. 正确识别reCAPTCHA版本并获取必要的网站密钥。
  3. 利用CapSolver等第三方服务来简化流程。
  4. 使用提供的Python脚本作为你特定需求的起点。

虽然这些技术很强大,但请始终负责任地使用它们,并遵守网站的服务条款。随着网络安全的不断发展,及时了解最新的CAPTCHA解决方法对于保持高效的自动化流程至关重要。

CapsolverCN官 方代理交流扣 群:497493756

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1947638.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

导航不是GPS吗,有人用北斗吗?

在现代生活中,提到导航,人们脑海中最先浮现的往往是GPS。然而,近年来,中国自主研发的北斗导航系统(BeiDou Navigation Satellite System, BDS)正在迅速崛起,逐步占据全球导航市场的一席之地&…

2023年全国赛C题《 电容电感测量装置》设计报告

测量原理 参考下面网站的方案 bookmark 参考LCR测试仪,基本工作原理为给DUT加上正弦激励信号,然后测得该DUT两端的电压和流过DUT的电流,即可通过计算得到DUT的性质和参数。 对于一个理想电容,电流相位应该超前电容两端电压90。…

Java结合uniapp实现验证码(附Demo)

目录 前言1. Java2. uniapp 前言 对于Java的知识点推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项目】实战CRUD的功能整理(持续更新) 本次的Demo主要以图片验证码的方式输入和接…

抖音矩阵管理系统功能说明:一站式掌握

在当下这个信息爆炸的时代,抖音作为短视频领域的佼佼者,其用户规模持续扩大,影响力日益增强。对于内容创作者和营销人员来说,如何高效管理抖音账号,实现内容的多平台分发和精准触达,成为了亟待解决的问题。…

【JAVA多线程】线程的状态控制

目录 1.JDK中的线程状态 2.基础操作 2.1关闭 2.2中断 2.3.等待、唤醒 2.4.阻塞、唤醒 1.JDK中的线程状态 在JDK的线程体系中线程一共6种状态: NEW(新建): 当线程对象创建后,但尚未启动时,线程处于新建状态。RUN…

代码随想录算法训练营day8 | 344.反转字符串、541.反转字符串 II、卡码网:54.替换数字

文章目录 344.反转字符串思路 541.反转字符串 II思路 卡码网:54.替换数字思路复习:字符串 vs 数组 总结 今天是字符串专题的第一天,主要是一些基础的题目 344.反转字符串 建议: 本题是字符串基础题目,就是考察 revers…

链式法则和自动求导

向量链式法则 说明: 1.第一个式子, y是标量,u是标量,x是n维向量 2.第二个式子,y是标量,u是k维向量,x是n维向量,所以y对u求导是k维的行向量,u对x求导是k行n列的矩阵&…

Node 版本控制工具 NVM 的安装和使用(Windows)

遇到了一个项目,前端的node版本很低,需要我去降低node版本才能下载依赖运行,我当然不是傻乎乎的降版本了,而是使用node版本控制工具 NVM。 NVM(Node Version Manager) nvm 是一个命令行工具,用于…

【OSS对象存储】Springboot集成阿里云OSS + 私有化部署Minio

【OSS对象存储】Springboot集成阿里云OSS 私有化部署Minio 一、摘要二、POM依赖三、配置文件四、表结构设计五、代码实现5.1 代码包结构5.2 API封装5.3 增删改查 六、扩展6.1 Minio配置https访问 一、摘要 掌握阿里云OSS、私有化部署Minio两种对象存储的使用方式运用工厂策略…

STM32-寄存器ADC配置指南

目录 输入方式: 模拟看门狗功能: ADC中断 配置一个Demo 设置时钟 自校准 通道选择 采样时间选择 转换模式选择 断续模式 启动转换 软件触发 外部触发 转换结束 关于DMA 模拟看门狗 ​编辑ADC数据位置​编辑 在STM32F中,ADC可…

FM与AM的特点

1.是什么? FM(调频):通过改变载波频率来传递信息AM(调幅):通过改变载波的振幅来传递信息 2.分别有什么特点? 抗干扰能力: FM:由于FM信号的传输不依赖于载波的…

c++初阶知识——string类详解

目录 前言: 1.标准库中的string类 1.1 auto和范围for auto 范围for 1.2 string类常用接口说明 1.string类对象的常见构造 1.3 string类对象的访问及遍历操作 1.4. string类对象的修改操作 1.5 string类非成员函数 2.string类的模拟实现 2.1 经典的string…

【CI/CD】docker + Nginx自动化构建部署

CI/CD是什么 CI/CD 是持续集成(Continuous Integration)和持续部署(Continuous Deployment)或持续交付(Continuous Delivery)的缩写,它们是现代软件开发中用于自动化软件交付过程的实践。 1、…

自动驾驶系列—智能巡航辅助功能中的路口通行功能介绍

自动驾驶系列—智能巡航辅助功能中的车道中央保持功能介绍 自动驾驶系列—智能巡航辅助功能中的车道变换功能介绍 自动驾驶系列—智能巡航辅助功能中的横向避让功能介绍 自动驾驶系列—智能巡航辅助功能中的路口通行功能介绍 文章目录 2. 功能定义3. 功能原理4. 传感器架构5. 实…

【Redis进阶】集群

1. 集群分片算法 1.1 集群概述 首先对于"集群"这个概念是存在不同理解的: 广义的"集群":表示由多台主机构成的分布式系统,称为"集群"狭义的"集群":指的是redis提供的一种集群模式&…

牛客JS题(二)直角三角形

注释很详细&#xff0c;直接上代码 涉及知识点&#xff1a; repeat格式化字符串 题干&#xff1a; 我的答案 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"></head><body><div classtriangle><…

C++树形结构(1 基础)

目录 一.基础&#xff1a; 1.概念&#xff1a; 2.定义&#xff1a; Ⅰ.树的相关基础术语&#xff1a; Ⅱ.树的层次&#xff1a; 3.树的性质&#xff1a; 二.存储思路&#xff1a; 1.结构体存储&#xff1a; 2.数组存储&#xff1a; 三.树的遍历模板&#xff1a; 四.信…

【BUG】已解决:NameError: name ‘python‘ is not defined

NameError: name ‘python‘ is not defined 目录 NameError: name ‘python‘ is not defined 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于…

【TortoiseGit】合并单个commit(提交)到指定分支上

0、前言 当我们用Git的时候经常用到多个分支&#xff0c;会经常有如下情况&#xff1a;一个dev分支下面会有多个test分支&#xff0c;而每个test分支由不同的开发者。而我们会有这样的需求&#xff1a; 当某个test分支完成了相应功能验证&#xff0c;就要把成功验证的功能代码…

【Git】上传代码命令至codeup云效管理平台

通过git命令上传本地代码库至阿里的codeup云效管理平台的代码管理模块&#xff0c;使用方便&#xff0c;且比github上传网络环境要求低&#xff0c;超大文件&#xff08;>100M&#xff09;的文件也可以批量上传&#xff0c;且上传速度喜人。 目录 &#x1f337;&#x1f33…