用python写一爬虫,需要模拟登陆,并且有数字验证码。通过selenium+pytesseract+PIL可以实现验证码识别并登陆。三大步:

  1. 用selenium截屏,此时截取的是整个页面的
  2. 用PIL库中的Image库,从刚才页面截屏中,通过crop()方法截取 出来验证码图片,然后进行灰度和二值化处理
  3. 用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来识别数字验证码的更多相关文章

  1. python之基于libsvm识别数字验证码

    1. 参考 字符型图片验证码识别完整过程及Python实现 2.图片预处理和手动分类 (1)分析图片 from PIL import Image img = Image.open('nums/ttt. ...

  2. 最邻近算法(KNN)识别数字验证码

    应用场景   对于简单的数字型验证码的自动识别.前期已经完成的工作是通过切割将验证码图片切割成一个一个的单个数字的图片,并按照对应的数字表征类别进行分类(即哪些图片表示数字7,哪些表示8),将各种数字 ...

  3. knn识别简单验证码

    参考 https://www.biaodianfu.com/knn-captcha-recognition.html 内容大致一样,只是根据自己的想法加入了一些改动 KNN(k近邻算法) 算法原理请看 ...

  4. selenium破解数字验证码

    搞了半天,总算弄出来了,识别率还可以,普通的数字验证码 from selenium import webdriver from PIL import Image import pytesseract ...

  5. Selenium&Pytesseract模拟登录+验证码识别

    验证码是爬虫需要解决的问题,因为很多网站的数据是需要登录成功后才可以获取的. 验证码识别,即图片识别,很多人都有误区,觉得这是爬虫方面的知识,其实是不对的. 验证码识别涉及到的知识:人工智能,模式识别 ...

  6. Selenium&Pytesseract模拟登录+验证码识别

    验证码是爬虫需要解决的问题,因为很多网站的数据是需要登录成功后才可以获取的. 验证码识别,即图片识别,很多人都有误区,觉得这是爬虫方面的知识,其实是不对的. 验证码识别涉及到的知识:人工智能,模式识别 ...

  7. selenium如何识别验证码

    一:前面的文章写了如何右键另存为图片,把验证码存为图片后,接下来就是要做,怎么把图片上的内容获取到,借住tesseract工具 1.下载tesseract:http://sourceforge.net ...

  8. [Java] 识别图片验证码

    现在大多数网站都采用了验证码来防止暴力破解或恶意提交.但验证码真的就很安全吗?真的就不能被机器识别?? 我先讲讲我是怎么实现站外提交留言到一个网站的程序. 这个网站的留言版大致如下: 我一看这种简单的 ...

  9. Python识别网站验证码

    http://drops.wooyun.org/tips/6313 Python识别网站验证码 Manning · 2015/05/28 10:57 0x00 识别涉及技术 验证码识别涉及很多方面的内 ...

随机推荐

  1. vue子组件修改父组件传递过来的值

    这里不再赘述父子组件及子父组件传值,不懂的同学可以翻看我以前写过的关于两者传值的文章 父子组件传值:https://www.cnblogs.com/Sky-Ice/p/9267192.html 子父组 ...

  2. python基础-5 冒泡排序、递归

    上节总结 一.上节内容补充回顾 1.lambda func = lambda x,y: 9+x 参数: x,y 函数体:9+x ==> return 9+x func: 函数名 def func ...

  3. linux中cut命令

    cut命令 cut常用参数 cut命令用来显示行中的指定部分,删除文件中指定字段. 说明:该命令有两项功能,其一是用来显示文件的内容,它依次读取由参数file所指明的文件,将它们的内容输出到标准输出上 ...

  4. [19/05/07-星期二] JDBC(Java DataBase Connectivity)_CLOB(存储大量的文本数据)与BLOB(存储大量的二进制数据)

    一. CLOB(Character Large Object ) – 用于存储大量的文本数据 – 大字段有些特殊,不同数据库处理的方式不一样,大字段的操作常常是以流的方式来处理的.而非一般的字段,一次 ...

  5. HDU 2783 You’ll be Working on the Railroad(最短路)

    You’ll be Working on the Railroad Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/3276 ...

  6. poj1011 Sticks (dfs剪枝)

    [题目描述] George took sticks of the same length and cut them randomly until all parts became at most 50 ...

  7. 从安装linux(centos7.6)系统到部署springboot java程序到k8s(大纲)

    本文说明从安装linux系统开始,一直到在k8s运行springboot程序全过程 本文假设在自己电脑操作,因此linux系统使用vmware虚拟机,linux发行版使用centos 7.6.1810 ...

  8. WannaCry的UWP版,哈哈哈

  9. ES6——Promise

    异步和同步 异步,操作之间没有关系,同时执行多个操作, 代码复杂 同步,同时只能做一件事,代码简单 Promise 对象 用同步的方式来书写异步代码 Promise 让异步操作写起来,像在写同步操作的 ...

  10. FCKeditor用在JSP中的几点注意事项

    转自:https://blog.csdn.net/asinzy/article/details/3854127 本篇文章主要介绍了"FCKeditor用在JSP中的几点注意事项", ...