使用Dart和WebDriver实现验证码识别登录详解


一、准备工作
安装Dart SDK。
安装WebDriver的依赖包。
使用Dart的pub命令安装所需依赖:

sh
复制代码
dart pub add webdriver
dart pub add process_run
二、打开网站并设置浏览器窗口更多内容联系1436423940
首先,使用WebDriver打开浏览器并将窗口最大化,以确保每次截取的图片都是相同的大小:

dart

import 'package:webdriver/io.dart';
import 'dart:io';

void main() async {
  final driver = await createDriver(
      uri: Uri.parse('http://localhost:9515'), desired: {
    'browserName': 'chrome',
    'chromeOptions': {
      'args': ['--headless', '--disable-gpu']
    }
  });

  await driver.get('https://www.example.com');
  await driver.window.maximize();
}
三、截取带有验证码的网页内容
截取当前屏幕内容,并保存到本地:

dart

import 'package:webdriver/io.dart';
import 'dart:io';
import 'dart:convert';

void main() async {
  final driver = await createDriver(
      uri: Uri.parse('http://localhost:9515'), desired: {
    'browserName': 'chrome',
    'chromeOptions': {
      'args': ['--headless', '--disable-gpu']
    }
  });

  await driver.get('https://www.example.com');
  await driver.window.maximize();

  // 截取屏幕内容
  final screenshot = await driver.captureScreenshotAsList();
  final screenshotBase64 = base64Encode(screenshot);
  File('H:/test/01.png').writeAsBytes(base64Decode(screenshotBase64));
}
四、识别图片验证码
使用 Tesseract 识别图片验证码
使用Tesseract命令行工具识别图片验证码:
dart

import 'package:webdriver/io.dart';
import 'dart:io';
import 'dart:convert';

void main() async {
  final driver = await createDriver(
      uri: Uri.parse('http://localhost:9515'), desired: {
    'browserName': 'chrome',
    'chromeOptions': {
      'args': ['--headless', '--disable-gpu']
    }
  });

  await driver.get('https://www.example.com');
  await driver.window.maximize();

  // 截取屏幕内容
  final screenshot = await driver.captureScreenshotAsList();
  final screenshotBase64 = base64Encode(screenshot);
  File('H:/test/01.png').writeAsBytes(base64Decode(screenshotBase64));

  // 使用Tesseract识别验证码
  final result = await Process.run(
    'tesseract',
    ['H:/test/01.png', 'stdout'],
  );
  print('Captcha: ${result.stdout}');
}
五、输入账号、密码和验证码
定位账号、密码和验证码输入框,并输入相关内容:

dart

import 'package:webdriver/io.dart';
import 'dart:io';
import 'dart:convert';

void main() async {
  final driver = await createDriver(
      uri: Uri.parse('http://localhost:9515'), desired: {
    'browserName': 'chrome',
    'chromeOptions': {
      'args': ['--headless', '--disable-gpu']
    }
  });

  await driver.get('https://www.example.com');
  await driver.window.maximize();

  final screenshot = await driver.captureScreenshotAsList();
  final screenshotBase64 = base64Encode(screenshot);
  File('H:/test/01.png').writeAsBytes(base64Decode(screenshotBase64));

  final result = await Process.run(
    'tesseract',
    ['H:/test/01.png', 'stdout'],
  );
  final captcha = result.stdout.toString().trim();
  print('Captcha: $captcha');

  final username = await driver.findElement(const By.cssSelector('#username'));
  final password = await driver.findElement(const By.cssSelector('#password_1'));
  final captchaField = await driver.findElement(const By.cssSelector('#user_ck'));

  await username.sendKeys('your_username');
  await password.sendKeys('your_password');
  await captchaField.sendKeys(captcha);
}
六、点击登录按钮
定位并点击登录按钮:

dart

import 'package:webdriver/io.dart';
import 'dart:io';
import 'dart:convert';

void main() async {
  final driver = await createDriver(
      uri: Uri.parse('http://localhost:9515'), desired: {
    'browserName': 'chrome',
    'chromeOptions': {
      'args': ['--headless', '--disable-gpu']
    }
  });

  await driver.get('https://www.example.com');
  await driver.window.maximize();

  final screenshot = await driver.captureScreenshotAsList();
  final screenshotBase64 = base64Encode(screenshot);
  File('H:/test/01.png').writeAsBytes(base64Decode(screenshotBase64));

  final result = await Process.run(
    'tesseract',
    ['H:/test/01.png', 'stdout'],
  );
  final captcha = result.stdout.toString().trim();
  print('Captcha: $captcha');

  final username = await driver.findElement(const By.cssSelector('#username'));
  final password = await driver.findElement(const By.cssSelector('#password_1'));
  final captchaField = await driver.findElement(const By.cssSelector('#user_ck'));

  await username.sendKeys('your_username');
  await password.sendKeys('your_password');
  await captchaField.sendKeys(captcha);

  final loginButton = await driver.findElement(const By.cssSelector('input[name="yt0"]'));
  await loginButton.click();

  await driver.quit();
}
七、关闭浏览器
最后,关闭浏览器:

dart

import 'package:webdriver/io.dart';
import 'dart:io';
import 'dart:convert';

void main() async {
  final driver = await createDriver(
      uri: Uri.parse('http://localhost:9515'), desired: {
    'browserName': 'chrome',
    'chromeOptions': {
      'args': ['--headless', '--disable-gpu']
    }
  });

  await driver.get('https://www.example.com');
  await driver.window.maximize();

  final screenshot = await driver.captureScreenshotAsList();
  final screenshotBase64 = base64Encode(screenshot);
  File('H:/test/01.png').writeAsBytes(base64Decode(screenshotBase64));

  final result = await Process.run(
    'tesseract',
    ['H:/test/01.png', 'stdout'],
  );
  final captcha = result.stdout.toString().trim();
  print('Captcha: $captcha');

  final username = await driver.findElement(const By.cssSelector('#username'));
  final password = await driver.findElement(const By.cssSelector('#password_1'));
  final captchaField = await driver.findElement(const By.cssSelector('#user_ck'));

  await username.sendKeys('your_username');
  await password.sendKeys('your_password');
  await captchaField.sendKeys(captcha);

  final loginButton = await driver.findElement(const By.cssSelector('input[name="yt0"]'));
  await loginButton.click();

  await driver.quit();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值