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之有容乃大的list(1)
Sep 14 Python
Python实现豆瓣图片下载的方法
May 25 Python
python分析作业提交情况
Nov 22 Python
利用Python进行异常值分析实例代码
Dec 07 Python
Python使用itertools模块实现排列组合功能示例
Jul 02 Python
Python3.5文件读与写操作经典实例详解
May 01 Python
关于pytorch中网络loss传播和参数更新的理解
Aug 20 Python
Python HTTP下载文件并显示下载进度条功能的实现
Apr 02 Python
基于Python3读写INI配置文件过程解析
Jul 23 Python
如何用Matplotlib 画三维图的示例代码
Jul 28 Python
python3 字符串str和bytes相互转换
Mar 23 Python
4种方法python批量修改替换列表中元素
Apr 07 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自动适应范围的分页代码
2008/08/05 PHP
php 小乘法表实现代码
2009/07/16 PHP
一个严格的PHP Session会话超时时间设置方法
2014/06/10 PHP
PHP中COOKIES使用示例
2015/07/26 PHP
php实现xml与json之间的相互转换功能实例
2016/07/07 PHP
Js之软键盘实现(js源码)
2007/01/30 Javascript
IE php关于强制下载文件的代码
2008/08/23 Javascript
Input 特殊事件onpopertychange和oninput
2009/06/17 Javascript
js 遍历对象的属性的代码
2011/12/29 Javascript
httpclient模拟登陆具体实现(使用js设置cookie)
2013/12/11 Javascript
Jquery在指定DIV加载HTML示例代码
2014/02/17 Javascript
使用nodejs、Python写的一个简易HTTP静态文件服务器
2014/07/18 NodeJs
js实现简单排列组合的方法
2016/01/27 Javascript
BootStrap智能表单实战系列(八)表单配置json详解
2016/06/13 Javascript
js闭包用法实例详解
2016/12/13 Javascript
JavaScript数组迭代方法
2017/03/03 Javascript
利用Node.js对文件进行重命名
2017/03/12 Javascript
如何优雅地在vue中添加权限控制示例详解
2019/03/07 Javascript
webpack中如何加载静态文件的方法步骤
2019/05/18 Javascript
Vue中实现回车键切换焦点的方法
2020/02/19 Javascript
[04:14]从西雅图到上海——玩家自制DOTA2主题歌曲应援TI9
2019/07/11 DOTA
Python中的hypot()方法使用简介
2015/05/18 Python
python中使用序列的方法
2015/08/03 Python
python编写微信远程控制电脑的程序
2018/01/05 Python
基于python实现名片管理系统
2018/11/30 Python
selenium+python自动化测试之使用webdriver操作浏览器的方法
2019/01/23 Python
python验证码图片处理(二值化)
2019/11/01 Python
美国婴儿用品及配件购买网站:Munchkin
2019/04/03 全球购物
四查四看剖析材料
2014/02/14 职场文书
中秋节主持词
2014/04/02 职场文书
2015年幼儿园安全工作总结
2015/05/12 职场文书
预备党员考察表党小组意见
2015/06/01 职场文书
小学体育组工作总结
2015/08/13 职场文书
电力培训学习心得体会
2016/01/11 职场文书
员工安全责任协议书
2016/03/22 职场文书
学生安全责任协议书
2016/03/22 职场文书