使用 Nim 实现 ReCAPTCHA 破解


安装依赖
首先确保你已经安装了 Nim,接着安装以下 Nim 库:

bash

nimble install httpbeast nimcrypto json
基础代码结构
我们将使用 Nim 的 httpclient 库与 YesCaptcha API 进行交互,使用 selenium 库来模拟点击操作。

nim

import httpclient, json, times, base64, os, strformat

# 配置 YesCaptcha 的 API 相关参数
const
  apiUrl = "https://api.yescaptcha.com/createTask"
  clientKey = "your_client_key"

# Captcha 识别类
type
  CaptchaResolver = object
    apiUrl: string
    clientKey: string

# 初始化 CaptchaResolver
proc initCaptchaResolver(apiUrl: string, clientKey: string): CaptchaResolver =
  result.apiUrl = apiUrl
  result.clientKey = clientKey

# 创建验证码识别任务
proc createTask(resolver: CaptchaResolver, imageBase64: string, questionId: string): JsonNode =
  let payload = %*{
    "clientKey": resolver.clientKey,
    "task": {
      "type": "ReCaptchaV2Classification",
      "image": imageBase64,
      "question": questionId
    }
  }
  let client = newHttpClient()
  let response = client.request(resolver.apiUrl, httpPost, headers = {
    "Content-Type": "application/json"
  }, body = $payload)
  return parseJson(response.body)

# 模拟图片 Base64 编码
proc encodeImageToBase64(imagePath: string): string =
  let file = readFile(imagePath)
  return encode(base64, file)

# YesCaptcha 服务接口测试
proc testCaptchaSolver() =
  let resolver = initCaptchaResolver(apiUrl, clientKey)
  let imageBase64 = encodeImageToBase64("captcha_image.png")
  let questionId = "/m/015qff" # 目标对象 ID,交通灯
  let result = createTask(resolver, imageBase64, questionId)
  echo "识别结果: ", result

testCaptchaSolver()
识别目标与模拟点击
提取 ReCAPTCHA 目标
通过 Selenium 库,我们可以提取 ReCAPTCHA 中的提示文本,然后使用这个文本查找对应的目标 ID。

nim

import selenium

proc getCaptchaTargetName(browser: WebDriver): string =
  let captchaElement = browser.findElementByCss(".rc-imageselect-desc-wrapper strong")
  return captchaElement.getText()

proc switchToIframe(browser: WebDriver, iframeCss: string) =
  let iframe = browser.findElementByCss(iframeCss)
  browser.switchToFrame(iframe)

# 切换到 ReCAPTCHA 的 iframe
proc handleReCaptcha(browser: WebDriver) =
  switchToIframe(browser, "iframe[title='reCAPTCHA']")
  let captchaButton = browser.findElementById("recaptcha-anchor")
  captchaButton.click()
  sleep(2000)
  switchToIframe(browser, "iframe[title*='recaptcha challenge']")
  let targetName = getCaptchaTargetName(browser)
  echo "需要点击的目标是: ", targetName

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值