Python完全识别验证码自动登录实例详解
作者:〆WangBenYan゜ 时间:2023-12-17 03:58:14
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())
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 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分钟 ...
来源:https://blog.csdn.net/qq_18808965/article/details/72729681
标签:Python,识别,验证码,登录
0
投稿
猜你喜欢
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
2023-08-05 18:46:48
python字典多键值及重复键值的使用方法(详解)
2023-03-18 14:23:15
MSSQL优化之探索MSSQL执行计划(转)
2011-11-03 17:16:21
在Pycharm中执行scrapy命令的方法
2022-10-17 03:45:26
初探MS SQL CE+Codesmith
2009-05-11 09:03:00
SQL Server 复制需要有实际的服务器名称才能连接到服务器
2012-07-11 15:46:51
怎样使用 SQL Server 数据库嵌套子查询
2009-02-05 15:26:00
Go语言集成开发环境IDE详细安装教程
2024-04-25 15:26:12
vuex state及mapState的基础用法详解
2024-05-13 09:07:23
关于程序员生活的一份调查,看看你属于哪一个群体吧
2022-08-11 16:00:48
Python3常见函数range()用法详解
2021-04-20 10:34:19
python将excel转换为csv的代码方法总结
2022-09-16 02:20:48
功能强大的php分页函数
2023-11-15 03:17:37
Python networkx包的实现
2023-07-29 23:58:03
Win8下python3.5.1安装教程
2021-11-15 13:14:54
Python3中的真除和Floor除法用法分析
2023-10-11 09:01:45
解密ThinkPHP3.1.2版本之独立分组功能应用
2023-11-20 09:06:02
高效地获取XMLhttp对象
2010-01-19 13:49:00
520必备!这些Python表白代码祝你脱单成功
2023-01-29 15:16:39
存储过程优缺点分析
2024-01-22 09:41:14