一、准备工作
安装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();
}