Flutter验证码识别插件captcha_solver的使用

发布于 1周前 作者 gougou168 来自 Flutter

Flutter验证码识别插件captcha_solver的使用

简介

captcha_solver 是一个用于Flutter的验证码识别插件,它可以帮助开发者自动解决各种类型的验证码,包括图片验证码、reCAPTCHA v2/v3、FunCAPTCHA和hCAPTCHA等。本文将详细介绍如何在Flutter项目中使用该插件。

准备工作

  1. 注册并登录到 scraptcha.com 并获取API密钥。
  2. pubspec.yaml 文件中添加 captcha_solver 依赖:
dependencies:
  captcha_solver: ^1.0.4

使用示例

图片验证码 (Image to Text)

对于普通图片验证码,你可以使用 imageMemoryToText()imageLinkToText() 方法来处理本地或远程图片。

import 'package:captcha_solver/captcha_solver.dart';

void main() async {
  // 初始化查询属性
  String apiKey = 'YOUR_API_KEY';
  String imageMemory = 'lib/captcha.jpg'; // 本地图片路径
  String imageLink = 'https://api.vk.com/captcha.php?sid=1'; // 远程图片链接
  
  // 初始化CaptchaSolver
  CaptchaSolver captchaSolver = CaptchaSolver(apiKey);
  
  // 请求参数
  Map inputs = {
    "clientKey": apiKey,
    "task": {
      "type": "ImageToTextTask",
      "body": imageMemory // 或者使用 imageLink
    }
  };
  
  // 获取验证码解决方案
  Map response = await captchaSolver.imageMemoryToText(inputs); // 或者使用 imageLinkToText()
  print('response: $response');
  
  if(response['status'] == 'ready') {
    print(response['solution']['text']);
  }
}

reCAPTCHA v2

对于reCAPTCHA v2,你需要提供网站URL和网站密钥。

import 'package:captcha_solver/captcha_solver.dart';

void main() async {
  // 初始化查询属性
  String apiKey = 'YOUR_API_KEY';
  String websiteURL = 'http://mywebsite.com/recaptcha/test.php';
  String websiteKey = 'YOUR_WEBSITE_KEY';
  
  // 初始化CaptchaSolver
  CaptchaSolver captchaSolver = CaptchaSolver(apiKey);
  
  // 请求参数
  Map inputs = {
    "clientKey": apiKey,
    "task": {
      "type": "RecaptchaV2TaskProxyless",
      "websiteURL": websiteURL,
      "websiteKey": websiteKey,
      "isInvisible": false
    }
  };
  
  // 获取验证码解决方案
  Map response = await captchaSolver.recaptcha(inputs);
  print('response: $response');
  
  if(response['status'] == 'ready') {
    print(response['solution']['gRecaptchaResponse']);
  }
}

reCAPTCHA v3

reCAPTCHA v3不需要用户交互,生成一个基于用户行为的分数。

import 'package:captcha_solver/captcha_solver.dart';

void main() async {
  // 初始化查询属性
  String apiKey = 'YOUR_API_KEY';
  String websiteURL = 'http://mywebsite.com/recaptcha/test.php';
  String websiteKey = 'YOUR_WEBSITE_KEY';
  
  // 初始化CaptchaSolver
  CaptchaSolver captchaSolver = CaptchaSolver(apiKey);
  
  // 请求参数
  Map inputs = {
    "clientKey": apiKey,
    "task": {
      "type": "RecaptchaV3TaskProxyless",
      "websiteURL": websiteURL,
      "websiteKey": websiteKey,
      "minScore": 0.3,
      "pageAction": "verify",
      "isEnterprise": false
    }
  };
  
  // 获取验证码解决方案
  Map response = await captchaSolver.recaptcha(inputs);
  print('response: $response');
  
  if(response['status'] == 'ready') {
    print(response['solution']['gRecaptchaResponse']);
  }
}

FunCAPTCHA - Arkose Labs

FunCAPTCHA需要提供网站公钥和网站URL。

import 'package:captcha_solver/captcha_solver.dart';

void main() async {
  // 初始化查询属性
  String apiKey = 'YOUR_API_KEY';
  String websiteURL = 'https://account.battle.net/creation/flow/creation-full';
  String websitePublicKey = 'YOUR_WEBSITE_KEY';
  
  // 初始化CaptchaSolver
  CaptchaSolver captchaSolver = CaptchaSolver(apiKey);
  
  // 请求参数
  Map inputs = {
    "clientKey": apiKey,
    "task": {
      "type": "FunCaptchaTaskProxyless",
      "websitePublicKey": websitePublicKey,
      "websiteURL": websiteURL
    }
  };
  
  // 获取验证码解决方案
  Map response = await captchaSolver.recaptcha(inputs);
  print('response: $response');
  
  if(response['status'] == 'ready') {
    print(response['solution']['token']);
  }
}

hCAPTCHA

hCAPTCHA是reCAPTCHA的一个替代方案,请求参数与reCAPTCHA类似。

import 'package:captcha_solver/captcha_solver.dart';

void main() async {
  // 初始化查询属性
  String apiKey = 'YOUR_API_KEY';
  String websiteURL = 'https://hcaptcha.com/';
  String websiteKey = 'YOUR_WEBSITE_KEY';
  
  // 初始化CaptchaSolver
  CaptchaSolver captchaSolver = CaptchaSolver(apiKey);
  
  // 请求参数
  Map inputs = {
    "clientKey": apiKey,
    "task": {
      "type": "HCaptchaTaskProxyless",
      "websiteURL": websiteURL,
      "websiteKey": websiteKey
    }
  };
  
  // 获取验证码解决方案
  Map response = await captchaSolver.recaptcha(inputs);
  print('response: $response');
  
  if(response['status'] == 'ready') {
    print(response['solution']['gRecaptchaResponse']);
  }
}

结论

通过使用 captcha_solver 插件,你可以在Flutter应用中轻松集成多种验证码识别功能。请确保替换所有示例代码中的 YOUR_API_KEY 和其他占位符为你自己的实际值,并根据具体需求调整请求参数。更多详细信息,请参考 Scraptcha 官方文档


更多关于Flutter验证码识别插件captcha_solver的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter验证码识别插件captcha_solver的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,关于Flutter中的验证码识别插件captcha_solver的使用,下面是一个基本的示例代码案例。这个示例将展示如何在Flutter应用中集成并使用captcha_solver插件来进行验证码识别。

首先,确保你已经在pubspec.yaml文件中添加了captcha_solver依赖:

dependencies:
  flutter:
    sdk: flutter
  captcha_solver: ^最新版本号  # 请替换为实际发布的最新版本号

然后,运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中,你可以按照以下步骤使用captcha_solver插件:

  1. 导入必要的包
import 'package:flutter/material.dart';
import 'package:captcha_solver/captcha_solver.dart';
  1. 创建并配置CaptchaSolver实例

你需要一个API密钥来访问验证码识别服务(例如,Google的Cloud Vision API或其他类似的服务)。请确保你已经获取了相应的API密钥,并遵循服务提供商的指南来配置服务。

class _MyAppState extends State<MyApp> {
  late CaptchaSolver captchaSolver;

  @override
  void initState() {
    super.initState();
    // 初始化CaptchaSolver实例,传入你的API密钥和配置(如果需要)
    captchaSolver = CaptchaSolver(apiKey: "你的API密钥");
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Captcha Solver Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              // 示例:上传并识别验证码图片
              ElevatedButton(
                onPressed: () async {
                  // 选择一个图片文件(这里假设你已经有一个图片文件路径)
                  File imageFile = File("path/to/your/captcha/image.png");

                  // 调用captchaSolver的solve方法
                  try {
                    String result = await captchaSolver.solve(imageFile);
                    // 显示识别结果
                    ScaffoldMessenger.of(context).showSnackBar(
                      SnackBar(content: Text("识别结果: $result")),
                    );
                  } catch (e) {
                    // 处理错误
                    ScaffoldMessenger.of(context).showSnackBar(
                      SnackBar(content: Text("识别失败: ${e.message}")),
                    );
                  }
                },
                child: Text('识别验证码'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

void main() {
  runApp(MyApp());
}

注意

  • 替换"你的API密钥"为你的实际API密钥。
  • 替换"path/to/your/captcha/image.png"为你的实际验证码图片文件路径。你可能需要使用文件选择器或图像选择器库来允许用户从设备中选择图片。
  • CaptchaSolversolve方法返回的是一个Future<String>,它表示识别到的文本。如果识别失败,它将抛出一个异常,你可以通过try-catch块来处理。

这个示例代码展示了如何初始化CaptchaSolver实例,并使用它来识别验证码图片中的文本。实际应用中,你可能需要根据具体需求进行更多的配置和错误处理。

回到顶部