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 识别涉及技术 验证码识别涉及很多方面的内 ...
随机推荐
- selenium元素定位之css选择器
在selenium元素定位时会用到css选择器选取元素,虽说xpath在定位元素时能解决大部分问题,但使用css选择器选取元素也是一种不错的选择. css相较与xpath选择元素优点如下: 表达式更加 ...
- 【ABAP系列】SAP ABAP 生成随机数的函数
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP ABAP 生成随机数的函数 ...
- jdbc步骤:
一.注册数据库驱动 Class.forName("com.mysql.jdbc.Driver"); 二.建立连接(Connection) Connection conn = Dri ...
- 【USACO18JAN】MooTube
原文链接:https://blog.csdn.net/Patrickpwq/article/details/86656456 给定一棵n个点的树(n=1e5),有边权, 两点间距离定义为两点路径上的 ...
- Trailing Zeroes (III) LightOJ - 1138 不找规律-理智推断-二分
其实有几个尾零代表10的几次方但是10=2*510^n=2^n*5^n2增长的远比5快,所以只用考虑N!中有几个5就行了 代码看别人的: https://blog.csdn.net/qq_422797 ...
- VUe.js 父组件向子组件中传值及方法
父组件向子组件中传值 1. Vue实例可以看做是大的组件,那么在其内部定义的私有组件与这个实例之间就出现了父子组件的对应关系. 2. 父子组件在默认的情况下,子组件是无妨访问到父组件中的数据的,所以 ...
- linux command --- terminal common commands
switch to root : sudo su.su root.sudo -s switch to users : su god(user name) set root password : sud ...
- mysql数据库监控工具-MONyog的配置和基本使用项
测试数据传输前,研发要求需要监控10万,50万,100万数量级的数据在传输过程数据库服务器的资源消耗情况,因为数据传输服务是定时任务执行,配置10秒中一次,一次处理500条,处理完10万数据可能要半个 ...
- Java高级数据类型转换:包装类、String字符串、Date类等与其他类型转换
1.包装类过渡类型转换 一般情况下,我们首先声明一个变量,然后生成一个对应的包装类,就可以利用包装类的各种方法进行类型转换了.例如: 当希望把float型转换为double型时: float f1=1 ...
- IDEA中Java目录结构
IDEA中Java的目录结构 1.首先新建Project,选择Empty,新建空的项目 2.选择Module时候,需要选择JDK,JDK只需要选择到Java Home目录就可以了 3.创建好Modul ...