selenium+pytesseract自动识别验证码实现自动健康打卡

   日期:2020-05-04     浏览:111    评论:0    
核心提示:步骤:打开浏览器–>登陆网站(识别验证码)–>自动化操作难点:1、验证码的识别:本来想用python

步骤:打开浏览器–>登陆网站(识别验证码)–>自动化操作

难点:
1、验证码的识别:本来想用cookie,但是我们学校的网站的cookie中httponly = False,不能用这种方式绕过登陆。只能识别出验证码后登陆,过了登陆这关后便是一马平川。2、网站元素的识别:世界上最遥远的距离,不是生与死,而是你在我眼前,我却识别不了你。selenium提供多种元素识别方式,常用的有id、name、class、xpath等,一种方式识别不了就换另一种,针对不同元素(不同网页)识别的方式也不同,可参考https://blog.csdn.net/qq_32897143/article/details/80383502

环境要求:selenium pytesseract pillow
在命令行使用pip命令安装以上第三方库,默认的安装方式很慢,使用镜像网站安装会快很多,直接复制下面这行到cmd
pip install --index https://pypi.mirrors.ustc.edu.cn/simple/ selenium

安装完以上库后,还需安装chromedriver(selenium的浏览器驱动,edge或firefox也可)和tesseract(用于识别出验证码)
安装chromedriver:打卡网站http://npm.taobao.org/mirrors/chromedriver/,找到对应自己的版本后下载,将chromedriver.exe文件复制到python的Scripts文件夹下(在cmd中用where python命令可找到自己的安装路径)
安装tesseract:参照https://blog.csdn.net/showgea/article/details/82656515

from selenium import webdriver
from selenium.webdriver.support.select import Select #专门用来处理下拉框
import pytesseract
import os
import sys,time
from PIL import Image,ImageEnhance
website= 'https://www.xxx.com' #打卡的网站
img_address = ['C:\\Users\\HP--\\Pictures\\喜欢的照片\\image1.png'] #将验证码图片下载下来后存放的地址,
 
driver = webdriver.Chrome()
driver.maximize_window()d
cnt = 0 #计数多少次识别验证码才成功

while True: #循环识别验证码直到成功
	driver.get(website)
	driver.get_screenshot_as_file(img_adress[0]) #将整个网页截图

	img =Image.open(img_address[0])
	box = (1217 , 496 , 1310 , 541)  #设置要裁剪的区域
	img = img.crop(box) 裁剪出只有验证码的图片
	img.save(img_address[0])
	
	vc = pytesseract.image_to_string(img_address[0]) 保存验证码
	account = 'xxxxx'
	password = 'xxxxx'
	
	try:
		driver.find_element_by_name("account").send_keys(account)
		driver.find_element_by_name("password").send_keys(password)
		driver.find_element_by_name("rancode").send_keys(verfication_code)
		driver.find_element_by_class_name("login").click()

		if(driver.find_element_by_id("rancode-tips")): #这里是验证码识别不正确点击登陆后出现的错误信息
			cnt += 1
			continue
	except: #正确识别后成功登陆,退出while循环
		break 

try:
	driver.find_element_by_class_name("bdorange.bg_health").click()
	driver.find_element_by_link_text("健康打卡").click()
	driver.find_element_by_id("cph_right_ok_submit").click()

	opt = driver.find_element_by_id("cph_right_e_area")
	s = Select(opt)
	s.select_by_visible_text('广东省') #以上三句处理下拉框

	driver.find_element_by_id('cph_right_e_location').send_keys('汕头市')
	driver.find_element_by_id('cph_right_e_observation_0').click()
	driver.find_element_by_id('cph_right_e_health_0').click()
	driver.find_element_by_id('cph_right_e_temp').send_keys('36.6')
	driver.find_element_by_id('cph_right_e_survey01_0').click()
	driver.find_element_by_id('cph_right_e_submit').click()
except:
	pass

driver.quit()
print('经过{}次尝试,自动健康打卡完成!'.format(cnt))
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服