ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2020-05-03 10:38:29  阅读:252  来源: 互联网

标签:img selenium driver 验证码 element pytesseract id 打卡 find


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

难点:
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))

标签:img,selenium,driver,验证码,element,pytesseract,id,打卡,find
来源: https://blog.csdn.net/weixin_44740037/article/details/105895728

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有