selenium来识别数字验证码
用python写一爬虫,需要模拟登陆,并且有数字验证码。通过selenium+pytesseract+PIL可以实现验证码识别并登陆。三大步:
- 用selenium截屏,此时截取的是整个页面的
- 用PIL库中的Image库,从刚才页面截屏中,通过crop()方法截取 出来验证码图片,然后进行灰度和二值化处理
- 用pytesseract库中的image_to_srting()方法,将图片转化为字符串。切割之后,转为数字。
具体实现的代码如下,需要先安装一下相应的库哦。
# coding=utf-8
from selenium import webdriver
import time
from selenium.webdriver.firefox.options import Options as FOptions
import datetime
import pymysql
import json
import numpy as np
from PIL import Image, ImageEnhance
import pytesseract options = FOptions()
obj = webdriver.Firefox(executable_path="geckodriver.exe", firefox_options=options)
obj.get('https://qcar.apiins.com/qcar/reLogin.do')
time.sleep(1)
obj.switch_to.alert.accept()
obj.find_element_by_name('usercode').send_keys('***********')
obj.find_element_by_name('passwd').send_keys('********')
"""
用selenium截图,先截整个页面,然后定位验证码图片,截取出来验证码图片
"""
obj.save_screenshot('hebao_login.png')
codeEelement = obj.find_element_by_id('VerifCode')
print('验证码图片',codeEelement,type(codeEelement))
imgSize = codeEelement.size # 获取验证码图片的大小
print('图片大小',imgSize,type(imgSize))
imgLocation = codeEelement.location # 获取验证码元素坐标
print('图片位置',imgLocation,type(imgLocation))
rangle = (int(imgLocation['x']), int(imgLocation['y']), int(imgLocation['x'] + imgSize['width']),int(imgLocation['y'] + imgSize['height'])) # 计算验证码整体坐标
print(rangle)
login = Image.open('hebao_login.png').convert('RGB')
"""
截取下来验证码图片,并且进行灰度转化,二值化处理
"""
loginImg = login.crop(rangle) # 截取验证码图片
loginImg.show()
loginImg = loginImg.convert("L")#convert()方法传入参数L,将图片转化为灰度图像
loginImg.show()
loginImg = np.asarray(loginImg)
loginImg = (loginImg > 100) * 255
loginImg = Image.fromarray(loginImg).convert('RGB')
sharpness = ImageEnhance.Contrast(loginImg)
loginImg = sharpness.enhance(3.0)
loginImg = loginImg.resize((300, 100))
loginImg.show()
"""
将图片转化为文本字符串,切割之后,转化为数字进行计算
"""
text = pytesseract.image_to_string(loginImg, lang='ytbx').strip().replace(' ', '')
print(text)
num = int(text.split('+?=')[1]) - int(text.split('+?=')[0])
print(num)
obj.find_element_by_name('checkCode').send_keys(str(num))
obj.find_element_by_xpath('/html/body/form/div[2]/div/ul/li[5]/input').click()
time.sleep(1)
selenium来识别数字验证码的更多相关文章
- python之基于libsvm识别数字验证码
1. 参考 字符型图片验证码识别完整过程及Python实现 2.图片预处理和手动分类 (1)分析图片 from PIL import Image img = Image.open('nums/ttt. ...
- 最邻近算法(KNN)识别数字验证码
应用场景 对于简单的数字型验证码的自动识别.前期已经完成的工作是通过切割将验证码图片切割成一个一个的单个数字的图片,并按照对应的数字表征类别进行分类(即哪些图片表示数字7,哪些表示8),将各种数字 ...
- knn识别简单验证码
参考 https://www.biaodianfu.com/knn-captcha-recognition.html 内容大致一样,只是根据自己的想法加入了一些改动 KNN(k近邻算法) 算法原理请看 ...
- selenium破解数字验证码
搞了半天,总算弄出来了,识别率还可以,普通的数字验证码 from selenium import webdriver from PIL import Image import pytesseract ...
- Selenium&Pytesseract模拟登录+验证码识别
验证码是爬虫需要解决的问题,因为很多网站的数据是需要登录成功后才可以获取的. 验证码识别,即图片识别,很多人都有误区,觉得这是爬虫方面的知识,其实是不对的. 验证码识别涉及到的知识:人工智能,模式识别 ...
- Selenium&Pytesseract模拟登录+验证码识别
验证码是爬虫需要解决的问题,因为很多网站的数据是需要登录成功后才可以获取的. 验证码识别,即图片识别,很多人都有误区,觉得这是爬虫方面的知识,其实是不对的. 验证码识别涉及到的知识:人工智能,模式识别 ...
- selenium如何识别验证码
一:前面的文章写了如何右键另存为图片,把验证码存为图片后,接下来就是要做,怎么把图片上的内容获取到,借住tesseract工具 1.下载tesseract:http://sourceforge.net ...
- [Java] 识别图片验证码
现在大多数网站都采用了验证码来防止暴力破解或恶意提交.但验证码真的就很安全吗?真的就不能被机器识别?? 我先讲讲我是怎么实现站外提交留言到一个网站的程序. 这个网站的留言版大致如下: 我一看这种简单的 ...
- Python识别网站验证码
http://drops.wooyun.org/tips/6313 Python识别网站验证码 Manning · 2015/05/28 10:57 0x00 识别涉及技术 验证码识别涉及很多方面的内 ...
随机推荐
- 【ABAP系列】SAP F4搜索帮助的高级版
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP F4搜索帮助的高级版 ...
- [Git] 007 三棵树以及向本地仓库加入第一个文件
1. "三棵树" 1.1 前言 理论上要稍稍复杂一点 我在这里说得简化一点 顺道挖个坑 下回具体介绍 坑号编码:Git07-1 1.2 看图 1.3 简介 树左:工作区(平时写代码 ...
- auditd重启失败
发现auditd 服务有问题 进行重启 systemctl restart auditd Failed to restart auditd.service: Operation refused, un ...
- Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
准备 利用vue-cli脚手架创建项目 进入项目安装vuex.axios(npm install vuex,npm install axios) axios配置 项目中安装axios模块(npm in ...
- P3064 [USACO12DEC]伊斯坦布尔的帮派 (模拟)
题目传送门 题意: 一片草地,每次可以只可以让一种牛占领,问你怎样安排牛的次序 最后剩下的是1号牛,并且输出其数量 思路: 看到n到100 ,所以可以(n^3)暴力,第一重遍历次序,第二枚举是哪只牛 ...
- Gradle Could not find method leftShift() for arguments
task hello << { println 'Hello world!' } 其中 << 在gradle 在5.1 之后废弃了 可以查看gradle 版本号 gradle ...
- 0基础入门 docker 部署 各种 Prometheus 案例 - 程序员学点xx 总集篇
目录 大家好, 学点xx 系列也推出一段时间了.虽然 yann 能力有限,但还是收到了很多鼓励与赞赏.对这个系列 yann 还是很喜欢的,特别是 Prometheus 篇,在期间经历公众号 100 篇 ...
- css盒子模型之边框宽度,边框颜色与边框样式
/* width和height只是设置盒子内容区的大小,而不是盒子的整个大小, 盒子可见框的大小由内容区,内边距和边框共同决定. */ .box1 { /* 设置内容区的宽度为400px */ wid ...
- linux测试 Sersync 是否正常
[root@SERSYNC web]# for i in {1..10000};do echo 123456 > /data/web/$i &>/dev/null;do ne [r ...
- Linux系统启动过程浅析
经过老师的讲解以及查阅资料后,现对Linux系统启动做以浅析,仅是个人理解. 主要的步骤有以下几步: 第一步:Power On.用户按下电源开关的那一瞬间,叫Power On阶段 .在这个阶段,BIO ...