python123用户登录c_Python完全识别验证码自动登录实例详解

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完全识别验证码自动登录实例详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值