Python完全识别验证码自动登录实例详解


Posted in Python onNovember 24, 2019

1、直接贴代码

#!C:/Python27
#coding=utf-8
 
 
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from pytesser import *
from PIL import Image,ImageEnhance,ImageFilter
from selenium.common.exceptions import NoSuchElementException,TimeoutException
import os,time
 
 
 
 
def before():
 
 
  driver.get(src)
 
 
  time.sleep(1)
 
 
  driver.maximize_window() # 浏览器全屏显示
 
 
  print ('\n浏览器全屏显示 ...')
 
 
 
 
 
 
def Convertimg():
  
  imglocation = ("//*[@id='loginForm']/div[4]/div[2]/img[1]")
  
  #下载验证码图片保存到本地
  driver.save_screenshot('E:\\pythonScript\\Codeimages\\code.png')
  
  #打开本地图片
  im = Image.open('E:\\pythonScript\\Codeimages\\code.png')
 
 
  left = driver.find_element_by_xpath(imglocation).location['x']
  top = driver.find_element_by_xpath(imglocation).location['y']
  right = driver.find_element_by_xpath(imglocation).location['x'] + driver.find_element_by_xpath(imglocation).size['width']
  bottom = driver.find_element_by_xpath(imglocation).location['y'] + driver.find_element_by_xpath(imglocation).size['height']
 
 
  im = im.crop((left, top, right, bottom))
 
 
  im.save('E:\\pythonScript\\Codeimages\\screenshot.png')
 
 
  print u"\n保存验证码图片完成"
 
 
  #移除截屏的图片
 
 
  os.remove('E:\\pythonScript\\Codeimages\\code.png')
 
 
  print u"\n删除截屏图片完成"
 
 
  #处理验证码图片
  src = ('E:\\pythonScript\\Codeimages\\screenshot.png')
 
 
  #调用裁剪图片方法
  Cutedge(src)
 
 
  #移除截屏的图片
  os.remove('E:\\pythonScript\\Codeimages\\screenshot.png')
  #灰化图片处理
  im = Image.open('E:\\pythonScript\\Codeimages\\CutedgeImage.png')
  
  imgry = im.convert('L')
  #二值化处理
 
 
  threshold = 100
  table = []
  for i in range(256):
    if i < threshold:
      table.append(0)
    else:
      table.append(1)
  out = imgry.point(table, '1')
 
 
  out.save('E:\\pythonScript\\Codeimages\\rgb.png')
 
 
  #vcode = pytesseract.image_to_string(out)
 
 
  #print (vcode)
 
 
  txtcode = image_to_string(out)
 
 
  print u"\n识别出验证码文字为:",image_to_string(out)
 
 
  print len(txtcode.strip())
 
 
  print
 
 
  if len(txtcode.strip()) == 4:
 
 
      print u"长度相等"
               
  else:
      print u"长度不相等,退出"
      
      driver.quit()
 
 
  #输入用户名和密码
  driver.find_element_by_id("username").send_keys("123456")
 
 
  driver.find_element_by_id("password").send_keys("123456")
 
 
  time.sleep(2)
 
 
  #对文本框输入验证码值
  driver.find_element_by_id("verifyCode").send_keys(txtcode.strip())
 
 
  time.sleep(3)
  #点击登录  
  driver.find_element_by_xpath("//*[@id='loginForm']/div[5]/div/img").click()
  #driver.find_element_by_class_name('loginbtn').click()
  time.sleep(7)
  
  
#针对有黑色边框的验证码图片的裁剪边缘  
def Cutedge(src):
  
  #设置要裁剪的区域
  im = Image.open(src)
  
  w, h = im.size
  
  print u"\n验证码原图宽、高尺寸为:",w,h
  
  box = (2,2,110,30)
  
  im.crop(box).save('E:\\pythonScript\\Codeimages\\CutedgeImage.png')
 
 
  print u"\n保存裁剪的图片 CutedgeImage.png"
 
 
#  
src = ("https://www.test.com")
 
 
driver = webdriver.Chrome() #Firefox()#
 
 
def method_2(src):
   
  before()
 
 
  #调用图片裁剪方法
  Convertimg()
 
 
  
def clickInput():
 
 
  driver.find_element_by_id("inputButton").click()
 
 
  print "\nInput Click Finish"
 
 
def clickOutput():
 
 
  print u"\n开始执行点击事件"
 
 
  #开始执行点击事件      inputButton
  driver.find_element_by_id("outputButton").click()
 
 
  time.sleep(2)
 
 
  print (u'\n开始执行任务,执行间隔时间为10分钟 ...')
 
 
 
 
 
 
  for i in range(1,4):
 
 
    ISOTIMEFORMAT="%Y-%m-%d %X"
  
    strTime = time.strftime( ISOTIMEFORMAT, time.localtime())
 
 
    driver.refresh()
 
 
    print u"\n正在执行第 ",i,"次...",strTime
  
    time.sleep(5)
  
    driver.find_element_by_id("outputButton").click()
  
    time.sleep(30)
  
    print
    #刷新浏览器
    print u"\n刷新当前页面 ..."
  
    driver.refresh()
  
    print (u'\n等待间隔时间为9分钟 ...')
  
    time.sleep(505)
  
    print u"\n已执行完第 ",i,u"次,",u"已等待",i*10,u"分钟"
   
  print (u'\n已执行完成...At The End OF,'+strTime)
  
  driver.quit()
 
 
def isPass():
  try:     
    #driver.find_element_by_id("username").is_displayed() == True
  
    driver.find_element_by_id('status').text == (u"验证码不正确!")
    
    print (u"\n****校验提示信息_验证码输入不正确****")
 
 
    driver.quit()
 
 
    print (u"\n关闭浏览器,执行外层循环...")
  
  except Exception:
    print (u"\n****校验提示信息_验证码输入正确****")
 
 
    clickOutput() #------  click Output
  
method_2(src) #进入工作页面
 
 
isPass()
 
 
#clickInput() #------  click Input
 
 
#clickOutput() #------  click Output
 
 
 
 
for i in range(1,6):
 
 
  driver = webdriver.Chrome()
  
  src = ("https://www.test.com")
 
 
  method_2(src)
 
 
  isPass()
  
  #clickOutput()

2、控制台日志

浏览器全屏显示 ...
 
获取到元素的文本值为: 
 
保存验证码图片完成
 
删除截屏图片完成
 
验证码原图宽、高尺寸为: 113 34
 
保存裁剪的图片 CutedgeImage.png
 
识别出验证码文字为: gnbn
 
 
 
开始执行任务,执行间隔时间为10分钟 ...
 
正在执行第 1 次... 2017-05-25 18:10:24
 
刷新当前页面 ...
 
等待间隔时间为9分钟 ...

以上这篇Python完全识别验证码自动登录实例详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python自动化工具日志查询分析脚本代码实现
Nov 26 Python
python中pygame模块用法实例
Oct 09 Python
在Linux上安装Python的Flask框架和创建第一个app实例的教程
Mar 30 Python
python 读写、创建 文件的方法(必看)
Sep 12 Python
Python简单计算文件MD5值的方法示例
Apr 11 Python
python和opencv实现抠图
Jul 18 Python
Django用户认证系统 组与权限解析
Aug 02 Python
python之array赋值技巧分享
Nov 28 Python
python 实现字符串下标的输出功能
Feb 13 Python
在 Pycharm 安装使用black的方法详解
Apr 02 Python
2021年最新用于图像处理的Python库总结
Jun 15 Python
Python识别花卉种类鉴定网络热门植物并自动整理分类
Apr 08 Python
关于Python 常用获取元素 Driver 总结
Nov 24 #Python
pyhton中__pycache__文件夹的产生与作用详解
Nov 24 #Python
使用Python实现画一个中国地图
Nov 23 #Python
用Python画小女孩放风筝的示例
Nov 23 #Python
python实现对列表中的元素进行倒序打印
Nov 23 #Python
Python实现打印实心和空心菱形
Nov 23 #Python
在Python中使用turtle绘制多个同心圆示例
Nov 23 #Python
You might like
在PHP中执行系统外部命令
2006/10/09 PHP
PHP递归获取目录内所有文件的实现方法
2016/11/01 PHP
(转载)JavaScript中匿名函数,函数直接量和闭包
2007/05/08 Javascript
LazyForm jQuery plugin 定制您的CheckBox Radio和Select
2009/10/24 Javascript
JQuery选择器特辑 详细小结
2012/05/14 Javascript
jquery remove方法应用详解
2012/11/22 Javascript
判断某个字符在一个字符串中是否存在的js代码
2014/02/28 Javascript
angularJS 中$scope方法使用指南
2015/02/09 Javascript
JQuery限制复选框checkbox可选中个数的方法
2015/04/20 Javascript
jQuery简单实现验证邮箱格式
2015/07/15 Javascript
基于jQuery滑动杆实现购买日期选择效果
2015/09/15 Javascript
JS实现模拟百度搜索“2012世界末日”网页地震撕裂效果代码
2015/10/31 Javascript
jquery操作select元素和option的实例代码
2016/02/03 Javascript
bootstrap监听滚动实现头部跟随滚动
2016/11/08 Javascript
JQuery实现动态操作表格
2017/01/11 Javascript
vue中如何实现变量和字符串拼接
2017/06/19 Javascript
详解VUE自定义组件中用.sync修饰符与v-model的区别
2018/06/26 Javascript
微信小程序 冒泡事件原理解析
2019/09/27 Javascript
vue v-for 点击当前行,获取当前行数据及event当前事件对象的操作
2020/09/10 Javascript
python插入排序算法实例分析
2015/07/03 Python
利用Python学习RabbitMQ消息队列
2015/11/30 Python
在win和Linux系统中python命令行运行的不同
2016/07/03 Python
基于Python的文件类型和字符串详解
2017/12/21 Python
ubuntu环境下python虚拟环境的安装过程
2018/01/07 Python
python通过百度地图API获取某地址的经纬度详解
2018/01/28 Python
Python基于OpenCV库Adaboost实现人脸识别功能详解
2018/08/25 Python
如何解决django-celery启动后迅速关闭
2019/10/16 Python
通过字符串导入 Python 模块的方法详解
2019/10/27 Python
Python+Kepler.gl轻松制作酷炫路径动画的实现示例
2020/06/02 Python
美国现代家具和家居商店:Apt2B
2016/08/29 全球购物
Happy Socks英国官网:购买五颜六色的袜子
2020/11/03 全球购物
化工工艺设计求职信
2014/06/25 职场文书
个人优缺点总结
2015/02/28 职场文书
2016年小学生教师节广播稿
2015/12/18 职场文书
2019年个人工作总结范文(3篇)
2019/08/27 职场文书
Redis读写分离搭建的完整步骤
2021/09/14 Redis