如何使用Python和Selenium解决reCAPTCHA

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
python 复制代码
# 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
python 复制代码
# 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

相关推荐
yusaisai大鱼7 分钟前
tensorflow_probability与tensorflow版本依赖关系
人工智能·python·tensorflow
J不A秃V头A9 分钟前
IntelliJ IDEA中设置激活的profile
java·intellij-idea
Biomamba生信基地11 分钟前
R语言基础| 功效分析
开发语言·python·r语言·医药
DARLING Zero two♡12 分钟前
【优选算法】Pointer-Slice:双指针的算法切片(下)
java·数据结构·c++·算法·leetcode
小池先生23 分钟前
springboot启动不了 因一个spring-boot-starter-web底下的tomcat-embed-core依赖丢失
java·spring boot·后端
CodeClimb26 分钟前
【华为OD-E卷-木板 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
odng29 分钟前
IDEA自己常用的几个快捷方式(自己的习惯)
java·ide·intellij-idea
夜幕龙33 分钟前
iDP3复现代码数据预处理全流程(二)——vis_dataset.py
人工智能·python·机器人
CT随37 分钟前
Redis内存碎片详解
java·开发语言
brrdg_sefg1 小时前
gitlab代码推送
java