python+selenium+tesseract-ocr 验证码全自动登录+模拟键盘鼠标操作

本文带你一步一步实现带验证码账号密码全自动登录+模拟键盘鼠标操作,省去每天启动各种软件 网页等重复的操作时间,开启一劳永逸模式,美哉!

第一步 说下环境配置  本次测试win10, chrome版本71.0 ,selenium3.14 ,python3.6,tesseract-ocr3.05,文章展开顺序按调用chromedriver 模拟键盘输入账号密码,截图验证码并对其处理后调用tesseract识别 以及说下踩过的坑  //gg

 很多文章上说下载firefox浏览器 利用其自带的驱动插件自主控制浏览器,但我的出了点问题索性直接上chrome浏览器,这个需要下载相对应的chromedriver驱动, 不然驱动不能兼容还是不行的

下载地址 http://chromedriver.storage.googleapis.com/index.html  安装在chrome.exe 目录下,记得加入到系统环境变量Path中,接下来后面的操作如果出现报错也很有可能是没加环境变量

 

 在python 中下载selenium库  命令输入 pip install selenium(如果还没有下python的可以点击python官网https://www.python.org/downloads/windows/下载,其次安装pip后才能用pip命令)这个selenium版本一般没问题的

接下来就看代码的 0.0

import os
import pytesseract
import time
import selenium 

from PIL import Image,ImageEnhance
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

iedriver = "C:/Program Files (x86)/Google/Chrome/Application/chromedriver.exe" #注意用反斜杠
os.environ["webdriver.ie.driver"] = iedriver  #调用chrome浏览器

driver = webdriver.Ie(iedriver)
driver.get("http://*******")#这个你要登陆的网站地址
#看自己的chrome.exe在电脑的那个目录下 ,自己去调整

然后按f12 查看网页html源码 如图(借用下csdn的哈哈)


elem_user = driver.find_element_by_name("all").send_keys("***")
elem_pwd = driver.find_element_by_name("psw").send_keys("***")
#模拟键盘输入账户 密码

 

4 本文的验证码是这种png类型的 (这个处理过后的白底黑字图片了,原来是彩色,因为tesseract在这种情况下识别率更高些,几乎99%吧)

这里的办法就是先对整这个屏幕截图  再对验证码区域截取如此图,(注意截图的好坏直接影响识别率,保证尽量没有其他噪点)

截图代码如下(先找到一个点定位在对其横纵坐标截取另外要安装PIL库     pip install Pillow (处理图像用的库)

driver.save_screenshot('button.png')
element = driver.find_element_by_id("txtCode") #定位点
left = element.location['x']+61
top =  element.location['y']+1
right = element.location['x'] + element.size['width']+47 
bottom = element.location['y'] + element.size['height']-1   #截图微调
image = Image.open('button.png').crop((left,top,right,bottom))

截完图对其像素处理为白底黑字

image = image.convert('L') 			#转换模式:L | RGB
image = ImageEnhance.Contrast(image)            #增强对比度
image = image.enhance(2.0) 			#增加饱和度
image.save('button.png')                        #截图完成
image = Image.open('button.png')

安装tesseract,下载地址:https://github.com/tesseract-ocr/tesseract/releases,要设置环境变量  建议安装在默认目录

安装pytesseract        pip install pytesseract

再调用tesseract对其进行识别

code = pytesseract.image_to_string(image)
print(code)
elem_texcode = driver.find_element_by_name("txCode").send_keys(code)
driver.find_element_by_name("Login").click() #登陆完成

完整代码

import os
import pytesseract
import time
import selenium

from PIL import Image,ImageEnhance
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

iedriver = "C:/Program Files (x86)/Google/Chrome/Application/chromedriver.exe")
os.environ["webdriver.ie.driver"] = iedriver  #调用chrome浏览器

driver = webdriver.Ie(iedriver)
driver.get("http://****")


elem_user = driver.find_element_by_name("Name").send_keys("***")
elem_pwd = driver.find_element_by_name("Pass").send_keys("***")



driver.save_screenshot('button.png')
element = driver.find_element_by_id("txCode") 
left = element.location['x']+61
top =  element.location['y']+1
right = element.location['x'] + element.size['width']+47 
bottom = element.location['y'] + element.size['height']-1
image = Image.open('button.png').crop((left,top,right,bottom))
image = image.convert('L') 			#转换模式:L | RGB
image = ImageEnhance.Contrast(image)            #增强对比度
image = image.enhance(2.0) 			#增加饱和度
image.save('button.png')                        #截图完成
image = Image.open('button.png')

code = pytesseract.image_to_string(image) #识别验证码
print(code)
elem_texcode = driver.find_element_by_name("txCode").send_keys(code)
driver.find_element_by_name("btnLogin").click() #登陆完成

driver.close()
driver.quit()#退出浏览器

总结

本过程难点在验证码定位处理识别过程,此外html定位元素时少用xpath,尽量用属性 name id 等定位

此外由于各种库 环境变量等调试环境的调整也折腾了不小时间

再加一个小插曲 当登陆后如果在进行其他操作时仅仅只是页面变化了 则这个定位框架还是不变的 如果窗口变了,则需要用

handle来换框架 ,还有如果定位的元素在不同的frame 中也需要用driver.switch_to_frame("***")来更新定位框架

鄙人之作 如有问题或建议可以留言联系 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页