200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > selenium--自动化识别图片验证码并输入

selenium--自动化识别图片验证码并输入

时间:2020-03-21 04:47:08

相关推荐

selenium--自动化识别图片验证码并输入

首先注册百度智能云账号(这里我用的是百度智能云):

1.要在这里面保存好API Key 和Secret Key

2.然后进入查看文档

在pycharm中:

import requestsimport redisimport base64# 封装百度类class Baidu:def __init__(self):# apikey 写入自己先前保存好的self.apikey = ""# api secretkeyself.apisecret = ""self.redis = redis.Redis(password="123",decode_responses=True)# 文字图片识别def cor(self, filename="./test.png"):# 定义请求地址request_url = "/rest/2.0/ocr/v1/accurate_basic"# 读取图片f = open(filename, 'rb')# base64编码img = base64.b64encode(f.read())# 定义请求参数params = {"image": img}access_token = self.redis.get("baidutoken")request_url = request_url + "?access_token=" + access_tokenheaders = {'content-type': 'application/x-www-form-urlencoded'}# 发起请求response = requests.post(request_url, data=params, headers=headers)if response:print(response.json())# 获取识别的结果num = ""for x in response.json()["words_result"]:num += x["words"]return num# 获取tokendef get_token(self):host = '/oauth/2.0/token?grant_type=client_credentials&client_id=%s' \'&client_secret=%s' % (self.apikey,self.apisecret)response = requests.get(host)if response:print(response.json())# 存储tokentry:self.redis.set("baidutoken",response.json()["access_token"])except Exception as e:print("请求报错,无法获取token")if __name__ == '__main__':baidu = Baidu()print(baidu.cor())

导入自动化文件:

from baiduapi import Baidu

在写自动化脚本时调用封装的百度类:

注意:自动化识别文字可能会出现识别不出来的可能,要解决这个Bug。

代码分享:

from selenium import webdriverimport timefrom mon.by import Byfrom time import sleepfrom baiduapi import Baidufrom selenium.webdriver.edge.options import Options# 设置配置myoptions = Options()myoptions.add_experimental_option("detach",True)# 自动化注册class AutoReg:# 初始化方法def __init__(self):self.url = "http://localhost:8080/reg"self.email = "123"self.password = "123"# 初始化浏览器实例self.browser = webdriver.Edge()# 打开网页self.browser.get("http://localhost:8080/reg")# 注册动作def first(self):# 延迟time.sleep(2)# 填写表单self.browser.find_elements(By.TAG_NAME, "input")[0].send_keys("123")self.browser.find_elements(By.TAG_NAME, "input")[1].send_keys("123")# 生成验证码self.imgcode()# 识别num = self.cor()# 写入验证码if num:self.send(num)# 写入验证码def send(self,num):self.browser.find_elements(By.TAG_NAME, "input")[2].send_keys(num)self.browser.find_elements(By.CLASS_NAME,"van-button")[1].click()# 重新生成图片验证码def imgcode(self):# 生成验证码self.browser.find_elements(By.CLASS_NAME, "van-button")[0].click()time.sleep(2)# 选择随机图片,截图img = self.browser.find_elements(By.TAG_NAME, "img")[0]# 截图该元素图片img.screenshot("test.png")# 识别方法def cor(self):# 实例化对象baidu = Baidu()num = baidu.cor()times = 0success = Falsewhile times<3 and not success:print("第%s次" % (times+1))num = baidu.cor()if len(num) == 4:success = Trueelse:self.imgcode()times += 1if success:return numelse:return None# 析构方法def __del__(self):time.sleep(3)self.browser.quit()if __name__ == '__main__':autoreg = AutoReg()autoreg.first()exit(-1)

其中涉及到页面截屏功能,根据当前页面来识别图片验证码,进行输入,要考虑好逻辑,避免出现

识别不出来的Bug!!!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。