用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组件父子间通信02

    三.组件间通信($parent $refs) 父组件要想获取子组件的数据:①在调用子组件的时候,指定ref属性<child-component ref="mySon"> ...

  2. vue复合组件----注册表单

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. NornJ-javascript模版引擎

    NornJ-javascript模版引擎 NornJ是一个渲染效率高,语法可读性好,可扩展性超强,适用场景丰富的javascript模板引擎. 学习网址:https://www.npmjs.com/p ...

  4. RMAN备份与恢复 —— 参数文件还原

         在RMAN用语中,“还原”与“恢复”具有不同的含义,还原(restore)是指访问先前生成的备份集,从中得到一个或多个对象,然后再磁盘上的某个位置还原这些对象.还原与恢复时分离的.恢复(re ...

  5. VUE组件嵌套

    vue中组件嵌套烦分为两种,分别是全局注册组件和局部注册组件 基本步骤: 1.在components 下创建一个新的.vue结尾的文件,文件首字母最好是大写,基于规范复制代码 2.分别写出结构层< ...

  6. TP中如何去掉index.php

    使用过TP的同学都知道,在URL始终会有index .php  我们如何才能够去掉呢? 1. 确认httpd.conf配置文件中加载了mod_rewrite.so模块 2. AllowOverride ...

  7. CSS高度坍塌原因及解决办法

    在文档流中,父元素的高度默认是被子元素撑开的,也就是子元素多高,父元素就多高. 但是当为子元素设置浮动以后,子元素会完全脱离文档流,此时将会导致子元素无法撑起父元素的高度,导致父元素的高度塌陷.由于父 ...

  8. Maven中添加Jetty服务器配置

    <project> <!--其它配置--> <build> <plugins> <plugin> <groupId>org.mo ...

  9. 09.Linux系统由于不正常关机导致的分区问题

    问题:Error:UNEXPECTED INCONSISTENCY: RUN fsck MANUALLY Give root password for maintenance ------------ ...

  10. tomcat的跳转与日志

    1.跳转的关键性配置; 2. 日志的配置 1.跳转的关键性配置 当用户访问http://www.a.com/test时,会跳转打开/var/www/html目录下的页面 关键性配置如下: [root@ ...