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基础教程之基本内置数据类型介绍
Feb 20 Python
Python实现将绝对URL替换成相对URL的方法
Jun 28 Python
基于python实现微信模板消息
Dec 21 Python
python在html中插入简单的代码并加上时间戳的方法
Oct 16 Python
Python补齐字符串长度的实例
Nov 15 Python
Python 存储字符串时节省空间的方法
Apr 23 Python
python itchat实现调用微信接口的第三方模块方法
Jun 11 Python
Python实现银行账户资金交易管理系统
Jan 03 Python
Python RabbitMQ实现简单的进程间通信示例
Jul 02 Python
Python改变对象的字符串显示的方法
Aug 01 Python
用Python进行websocket接口测试
Oct 16 Python
Numpy中的数组搜索中np.where方法详细介绍
Jan 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
咖啡风味 世界咖啡主要分布分布 咖啡的生长要求
2021/03/06 新手入门
PHP 正则判断中文UTF-8或GBK的思路及具体实现
2013/11/26 PHP
PHP处理postfix邮件内容的方法
2015/06/16 PHP
php简单统计字符串单词数量的方法
2015/06/19 PHP
JavaScript 撑出页面文字换行
2009/06/15 Javascript
cloudgamer出品ImageZoom 图片放大效果
2010/04/01 Javascript
jQuery对表单的操作代码集合
2011/04/06 Javascript
js 分页全选或反选标识实现代码
2011/08/09 Javascript
js取得url地址参数实例
2013/02/22 Javascript
javascript实现div的显示和隐藏的小例子
2013/06/25 Javascript
javascript写的一个模拟阅读小说的程序
2014/04/04 Javascript
AngularJs Modules详解及示例代码
2016/09/01 Javascript
js 获取html5的data属性实现方法
2017/07/28 Javascript
JavaScript面向对象精要(下部)
2017/09/12 Javascript
Vue不能观察到数组length的变化
2018/06/08 Javascript
JavaScript中关于base64的一些事
2019/05/06 Javascript
VUE实现自身整体组件销毁的示例代码
2020/01/13 Javascript
JavaScript异步操作的几种常见处理方法实例总结
2020/05/11 Javascript
JS代码简洁方式之函数方法详解
2020/07/28 Javascript
vue绑定数字类型 value为数字的实例
2020/08/31 Javascript
python统计一个文本中重复行数的方法
2014/11/19 Python
网站渗透常用Python小脚本查询同ip网站
2017/05/08 Python
Django视图之ORM数据库查询操作API的实例
2017/10/27 Python
python如何拆分含有多种分隔符的字符串
2018/03/20 Python
python使用turtle绘制国际象棋棋盘
2019/05/23 Python
HTML5+CSS3 实现灵动的动画 TAB 切换效果(DEMO)
2017/09/15 HTML / CSS
雅虎笔试题(字符串操作)
2015/03/24 面试题
企业治理工作自我评价
2013/09/26 职场文书
本科生职业生涯规划书范文
2014/01/21 职场文书
《少年王冕》教学反思
2014/04/11 职场文书
共产党员岗位承诺书
2014/05/29 职场文书
医药销售自荐书
2014/05/29 职场文书
企业领导班子四风对照检查材料
2014/09/27 职场文书
2014党支部对照检查材料思想汇报
2014/10/05 职场文书
设置IIS Express并发数
2022/07/07 Servers
Navicat Premium自定义 sql 标签的创建方式
2022/09/23 数据库