Python简单实现自动识别并填加验证码

实现自动识别网页中的验证码并填写,需要结合使用网络爬虫技术、图像识别(OCR),以及可能的浏览器自动化工具(如Selenium)。以下简单实现一下如何结合这些技术来实现这一目标:

步骤 1: 获取验证码图片

首先,您需要通过网络爬虫技术从网页中下载验证码图片。这通常涉及分析网页的HTML结构,找到验证码图片的URL,然后使用requests库下载图片。

 

Python

1import requests
2
3def download_captcha(url):
4    response = requests.get(url)
5    with open('captcha.png', 'wb') as f:
6        f.write(response.content)

步骤 2: 图像预处理与识别

接着,使用pytesseractopencv-python对下载的验证码图片进行预处理和识别。

首先,请确保已安装这两个库:

Bash
pip install pytesseract opencv-python

然后,您可以使用以下 Python 代码来识别验证码:

Python
import cv2
import pytesseractdef recognize_captcha(image_path):# 加载图像image = cv2.imread(image_path)# 转换为灰度图像gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 使用高斯模糊减少噪声blurred_gray_image = cv2.GaussianBlur(gray_image, (5, 5), 0)# 使用二值化提高对比度_, binary_image = cv2.threshold(blurred_gray_image, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)# 使用 PyTesseract 进行 OCRrecognized_text = pytesseract.image_to_string(binary_image, lang='eng')return recognized_text# 测试函数
if __name__ == "__main__":captcha_image_path = "path/to/your/captcha/image.jpg"  # 替换为您自己的验证码图像路径recognized_captcha = recognize_captcha(captcha_image_path)print("Recognized captcha:", recognized_captcha)

步骤 3: 使用Selenium模拟浏览器操作

Selenium是一个强大的工具,可以模拟真实用户的行为,包括填写表单和点击按钮。首先安装selenium:

 

Bash

pip install selenium

确保你的系统中安装了合适的WebDriver(如ChromeDriver),然后使用Selenium打开网页、定位输入框和提交按钮,并填充识别到的验证码。

 

Python

from selenium import webdriver
from selenium.webdriver.common.keys import Keysdef fill_captcha_and_submit(captcha_value, form_url):driver = webdriver.Chrome()  # 确保ChromeDriver路径已加入环境变量或指定完整路径driver.get(form_url)# 假设input标签的id为'captcha_input',submit按钮的id为'submit_button'captcha_input = driver.find_element_by_id('captcha_input')submit_button = driver.find_element_by_id('submit_button')captcha_input.send_keys(captcha_value)submit_button.click()# 记得关闭浏览器窗口driver.quit()

整合流程

最后,整合上述步骤实现完整的自动化流程:

 

Python

def main():captcha_url = "网页中验证码图片的URL"form_url = "提交表单的URL"download_captcha(captcha_url)captcha_text = recognize_captcha('captcha.png')fill_captcha_and_submit(captcha_text, form_url)if __name__ == "__main__":main()

请注意,自动识别和填写验证码可能违反网站的服务条款,且对于设计复杂、存在噪声或变形的验证码,自动识别的准确率可能会大大降低。此外,频繁的自动化请求也可能导致IP被封禁。因此,在实际应用中请确保遵守相关法律法规和服务条款。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/34194.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Rust单元测试、集成测试

单元测试、集成测试 在了解了如何在 Rust 中写测试用例后,本章节我们将学习如何实现单元测试、集成测试,其实它们用到的技术还是上一章节中的测试技术,只不过对如何组织测试代码提出了新的要求。 单元测试 单元测试目标是测试某一个代码单…

细说QT表格类复杂控件用法(TableView/TreeView/ListView)

文章目录 表格类控件样式控制设置表格类控件指示器样式表格类控件嵌入自定义控件表格控件禁用列拖动设置列宽和行高表格选中操作数据库+表格控件选中操作和选中样式Qt提供了几种基于模型/视图(Model/View)架构的表格类控件,主要包括QTableView、QTreeView和QListView。这些控件…

Makefile中lastword的用法

Makefile中lastword的用法 在 Makefile 中,lastword 函数用于返回参数列表中的最后一个单词(以空格或制表符分隔)。它的基本语法如下: lastword words其中,words 是一个包含多个单词的参数列表,可以是变量…

一次DC1靶机的渗透测试

确定目标IP: nmap -sP 192.168.11.1/24 发现目标机器 扫描开放的端口: nmap -T4 -A -v 192.168.11.145 发现开放了一个80端口,并且给出了是Drupal的管理系统 浏览器访问这个服务: 因为这是一个Drupal的管理系统,那么…

Pandas基础应用:数据处理与分析的利器

概括 在数据科学领域,Pandas无疑是一个强大的数据处理和分析工具。它提供了高效、灵活的数据结构和数据分析功能,使得数据清洗、转换、聚合和可视化等操作变得轻而易举。本文将介绍Pandas的基础应用,帮助读者快速上手并掌握其核心功能。 一…

openlayers禁用鼠标滚轮放大、拖拽事件并设置为只有按住Ctrl键才可以执行放大拖拽操作

禁用openlayers鼠标滚轮放大、拖拽移动地图设置这两行代码即可: new Map({interactions: defaults({ dragPan: false, mouseWheelZoom: false }), }) 或者设置只允许按住Ctrl键才可以操作 import { DragPan, MouseWheelZoom, defaults } from "ol/interact…

利用第三方服务对目标进行被动信息收集防止被发现(web安全白帽子)

利用第三方服务对目标进行被动信息收集防止被发现(web安全白帽子) 1 被动信息收集1.1 信息收集内容1.2 信息用途 2 信息收集-DNS2.1 DNS信息收集NSLOOKUP2.1.1 ping2.1.2 nslookup 2.2 DNS信息收集-DIG(此命令查到的结果更复杂些,…

算法训练营day19--530.二叉搜索树的最小绝对差+501.二叉搜索树中的众数+236. 二叉树的最近公共祖先

一、530.二叉搜索树的最小绝对差 题目链接:https://leetcode.cn/problems/minimum-absolute-difference-in-bst/ 文章讲解:https://programmercarl.com/0530.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E7%9A%84%E6%9C%80%E5%B0%8F%E7%BB%9D%E5%AF…

shell脚本中sudo密码自动输入

在shell脚本中, 我们可能需要用到sudo权限, 如果没有免密设置, 是需要输入密码的, 但是在自动化的脚本中,我们不希望进行手动密码输入,这时就需要用到密码自动输入。 方法如下: echo "my_passwd&quo…

【ubuntu noble】给 apt 添加代理

修改apt.conf sudo vi /etc/apt/apt.conf添加以下内容 Acquire::http::Proxy "http://proxy.example.com:8080"; Acquire::https::Proxy "http://proxy.example.com:8080";出现公钥问题 去我上一篇博客,有解决方案

Ext JS+Spring Boot 使用Ajax方式上传文件

实现方式 使用 Ext JS 进行 AJAX 调用以传递文件通常涉及到创建一个 FormData 对象,将文件附加到这个对象中,然后通过 Ext JS 的 AJAX API 发送这个对象。 基本步骤 以下是使用 Ext JS 发送文件的基本步骤: 准备文件和数据: 首先需要获取到要传递的文件 创建 FormData 对…

红队内网攻防渗透:内网渗透之内网对抗:横向移动篇NTLM中继Relay重放SMBEWSLADP协议强制认证钓鱼监听

NTLM Relay其实严格意义上并不能叫NTLM Relay,而是应该叫 Net-NTLM Relay。它是发生在NTLM认证的第三步,在 Type3 Response消息中存在Net-NTLM Hash,当攻击者获得了Net-NTLM Hash后,可以进行中间人攻击,重放Net-NTLM Hash,这种攻击手法也就是大家所说的NTLM Relay(NTLM 中…

MAB规范(3):Chapter6 Glossary 术语表

第6章 - 术语表 此章不做过多的批注,都是些简单的术语解释。

学分制系统 GetCalendarContentById SQL注入致RCE漏洞复现

0x01 产品简介 学分制系统由上海鹏达计算机系统开发有限公司研发,是基于对职业教育特点和需求的深入理解,结合教育部相关文件精神,并广泛吸纳专家、学者意见而开发的一款综合性管理系统。系统采用模块化的设计方法,方便学校根据自身教学改革特点、信息化建设进程情况选择、…

某某商场对账返款单,table

好久不写原生html&#xff0c;今天写了个&#xff0c;快忘完了 。。。 Double Header Table ***商场统一收银结算商户对账返款单 商场&#xff08;盖章有效&#xff09; 铺位名称&#xff1a; 铺位号&#xff1a; 制单人&#xff1a; 制单日期&#xff1a; </tr><tr&…

前端微应用打开新的窗口时,如何防止matched数据丢失?

本文章基于vueqiankun微前端架构 1、qiankun 与 matched &#xff08;1&#xff09;在 qiankun 微前端架构中&#xff0c;matched 数据通常与路由状态相关&#xff0c;是路由库&#xff08;如 vue-router、react-router 等&#xff09;内部使用的一个状态 &#xff08;2&…

Lesson 39 Don‘t drop it!

Lesson 39 Don’t drop it! 词汇 front n. 前面 搭配&#xff1a;in front of … 在……前面&#xff08;外部&#xff09;    in the front of … 在……前面&#xff08;内部&#xff09; 例句&#xff1a;Bobby坐在Sam的前面。    Bobby is sitting in front of Sam…

嵌入式C语言中常见寄存器的控制方法

使用C语言对寄存器赋值时,常常需要用到C语言的位操作方法。 把寄存器某位清零 假设a代表寄存器,且其中本来已有值。如果要把其中某一位清零且其它位不变,代码如下。 //定义一个变量 a = 1001 1111 b (二进制数)unsigned char a = 0x9f;//对 bit2 清零a &= ~(1<<…

深度学习之近端策略优化(Proximal Policy Optimization,PPO)

PPO(Proximal Policy Optimization,近端策略优化)是深度强化学习中的一种算法,属于策略梯度方法中的一种。PPO通过优化策略来最大化累积奖励,具有稳定性好、易于调参等优点,是目前广泛应用的一种深度强化学习算法。下面介绍PPO的基本原理和流程。 PPO基本原理 PPO算法的…

C++系统相关操作7 - 判断系统大小端大小端的数据转换

1. 关键词2. sysutil.h3. sysutil.cpp4. 测试代码5. 运行结果6. 源码地址 1. 关键词 关键词&#xff1a; C 大端 小端 数据转换 跨平台 大小端的定义&#xff1a; 大端&#xff08;Big Endian&#xff09;和小端&#xff08;Little Endian&#xff09;是指在计算机内存中存…