首页 > 编程语言 >使用 C++ 实现验证码识别与自动化登录

使用 C++ 实现验证码识别与自动化登录

时间:2024-10-20 13:20:59浏览次数:1  
标签:std string 登录 image 验证码 C++ captcha easy curl

  1. 安装所需依赖
    确保你已经安装以下库:

libcurl:用于发送 HTTP 请求。
OpenCV:用于图像处理。
Tesseract:用于 OCR 识别。
在 Ubuntu 系统中,你可以使用以下命令安装这些依赖:

bash

sudo apt-get install libcurl4-openssl-dev
sudo apt-get install libopencv-dev
sudo apt-get install tesseract-ocr libleptonica-dev
2. 下载验证码图片
使用 libcurl 下载验证码图片并保存到本地:

cpp

include

include <curl/curl.h>

include

size_t write_data(void ptr, size_t size, size_t nmemb, std::ofstream &stream) {
size_t written = stream.write(reinterpret_cast<const char
>(ptr), size * nmemb).tellp();
return written;
}更多内容联系1436423940

void download_captcha(const std::string &url, const std::string &save_path) {
CURL *curl;
std::ofstream file(save_path, std::ios::binary);
CURLcode res;

curl = curl_easy_init();
if (curl) {
    curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, NULL);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, &file);
    res = curl_easy_perform(curl);
    curl_easy_cleanup(curl);
    file.close();
    if (res != CURLE_OK) {
        std::cerr << "下载失败: " << curl_easy_strerror(res) << std::endl;
    } else {
        std::cout << "验证码图片已保存为 " << save_path << std::endl;
    }
}

}
3. 图像处理和 OCR 识别
使用 OpenCV 和 Tesseract 进行图像处理和 OCR 识别:

cpp

include <opencv2/opencv.hpp>

include <tesseract/baseapi.h>

include <tesseract/ocrclass.h>

std::string recognize_captcha(const std::string &image_path) {
cv::Mat image = cv::imread(image_path, cv::IMREAD_GRAYSCALE);
cv::threshold(image, image, 127, 255, cv::THRESH_BINARY);

tesseract::TessBaseAPI *ocr = new tesseract::TessBaseAPI();
ocr->Init(NULL, "eng");
ocr->SetImage(image.data, image.cols, image.rows, 1, image.step[0]);
char *outText = ocr->GetUTF8Text();

std::string result(outText);
delete[] outText;
ocr->End();
return result;

}
4. 自动化登录
使用 libcurl 发送 POST 请求,模拟登录操作,并传递用户名、密码和识别出的验证码:

cpp

void login(const std::string &username, const std::string &password, const std::string &captcha) {
CURL *curl;
CURLcode res;

curl = curl_easy_init();
if (curl) {
    curl_easy_setopt(curl, CURLOPT_URL, "https://captcha7.scrape.center/login");
    curl_easy_setopt(curl, CURLOPT_POST, 1L);

    std::string post_fields = "username=" + username + "&password=" + password + "&captcha=" + captcha;
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, post_fields.c_str());

    res = curl_easy_perform(curl);
    curl_easy_cleanup(curl);

    if (res != CURLE_OK) {
        std::cerr << "登录失败: " << curl_easy_strerror(res) << std::endl;
    } else {
        std::cout << "登录成功" << std::endl;
    }
}

}
5. 主程序
整合上述代码,创建主程序:

cpp

int main() {
const std::string captcha_url = "https://captcha7.scrape.center/captcha.png";
const std::string captcha_path = "captcha.png";

// 下载验证码
download_captcha(captcha_url, captcha_path);

// 识别验证码
std::string captcha_text = recognize_captcha(captcha_path);
std::cout << "识别结果: " << captcha_text << std::endl;

// 登录
login("admin", "admin", captcha_text);

return 0;

}

标签:std,string,登录,image,验证码,C++,captcha,easy,curl
From: https://www.cnblogs.com/ocr1/p/18487166

相关文章

  • PbootCMS后台登录验证码有数值,但是看不清是怎么回事?
    遇到PbootCMS后台登录验证码看不清的问题,可以尝试以下几个解决方法:调整浏览器设置:尝试清除浏览器缓存和Cookies,有时候旧的缓存数据会影响页面的显示。检查浏览器的缩放比例是否合适,不合适的缩放比例可能会导致验证码图片显示不清晰。更换浏览器:有时候特定浏览器可能对......
  • pbootcms网站后台突然登录不了啦
    如果您使用PbootCMS做的网站,后台账号和密码都没有错误,但今天突然登录不了,可以按照以下步骤进行排查和解决:1.删除 runtime 文件夹适用版本:PbootCMSV3.2.5以前的版本步骤备份文件:在进行任何修改前,请先备份 runtime 文件夹,以防止意外情况发生。备份命令示例(Lin......
  • PBOOTCMS登录请求发生错误,您可按照如下方式排查: 1、试着删除根目录下runtime目录,刷新
    当您在使用PbootCMS时,后台登录请求发生错误,提示“表单提交校验失败,请刷新后重试”。这通常是由于缓存文件过多、会话文件存储目录权限问题或服务器环境问题引起的。解决方法删除 runtime 目录步骤:备份文件:在进行任何修改前,请先备份 runtime 文件夹,以防止意外情况......
  • PbootCMS网站后台登录页面样式怎么修改
    1.文件位置路径:根目录 apps/admin/view/default/index.html例如,如果你的项目根目录是 /var/www/html/pbootcms,则文件路径为 /var/www/html/pbootcms/apps/admin/view/default/index.html2.修改步骤备份文件:在进行任何修改前,请先备份 index.html 文件,以防止......
  • PbootCMS修改后台登录账号和密码
    登录后台:使用当前的管理员账号和密码登录后台管理页面。修改密码:登录后,在右上角点击用户头像或用户名,通常会有一个下拉菜单。选择“修改密码”或类似的选项。在弹出的页面中,输入当前密码和新密码,然后保存。修改账号(可选):如果需要修改管理员账号,通常需要在后台的......
  • 2.1.2 话题通信基本操作A(C++)
    需求:编写发布订阅实现,要求发布方以10HZ(每秒10次)的频率发布文本消息,订阅方订阅消息并将消息内容打印输出。分析:在模型实现中,ROSmaster不需要实现,而连接的建立也已经被封装了,需要关注的关键点有三个:发布方接收方数据(此处为普通文本)流程:编写发布方实现;编写订阅......
  • C++编程-贪心算法2
    目录先言例题三:删数问题(NOI1994)题目描述算法分析标准程序-字符串String例题四:拦截导弹问题题目描述算法分析主要框架(标准程序)例题五:活动选择题目描述算法分析标准程序先言今天讲贪心算法的第3~5例题例题三:删数问题(NOI1994)题目描述【题目描述】输......
  • c++跑酷(技能升级版,升级火,镖,水)
    #include<bits/stdc++.h> #include<windows.h>#include<stdio.h>#include<conio.h>#include<time.h>#defineNorif(B[b].x<5)B[b].x=5;#defineOut1Bx1-Bvx1<=6||Bx1-Bvx1>=28||By1-Bvy1<=7||By1-Bvy1>=27#defineOut......
  • 用C++实现自己的智能指针:深入探讨内存管理与RAII模式
    解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界C++中的内存管理一直以来是程序员的一个难点,尤其是在处理动态内存分配时。智能指针(如std::unique_ptr和std::shared_ptr)通过RAII(资源获取即初始化)的设计理念,极大地简化了动态内存的管理,减少了内存泄漏的风险。然......
  • 用C++编写一个简单的游戏引擎:从游戏循环到物理与渲染的全面解析
    解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界构建一个基础的2D游戏引擎是一项富有挑战性但极具学习价值的任务。本文将通过从零开始的方式,逐步讲解如何使用C++开发一个简单的游戏引擎。内容涵盖了游戏引擎的核心架构设计,包括游戏循环、物理引擎和图形渲染等......