1、验证码识别
验证码识别主要分为两步:验证码图片截屏、图片OCR识别。因为OCR识别暂时无离线包,所以该功能使用互联网查询。
温馨提示:OCR识别接口网上很多,这里使用快识图片识别平台,每天有100的免费查询次数,具体使用方法可参考平台官方API文档。
async def verification_code(page):
YZM = await page.querySelector('#img_path') # 验证码图片定位
await YZM.screenshot({'path': 'yanzhengma.png'}) # 验证码插件截图保存
code = get_code('yanzhengma.png') # 用OCR识别截图中的验证码
return code
def get_code(file_path):
# 获取token
url = 'http://api.95man.com:8888/api/Http/UserTaken?user=username&pwd=password&isref=0'
token_request = requests.get(url)
token_raw = str(token_request.content)
token = token_raw[4: -1] # 平台返回值结构可能会和API文档中描述不一致,需人工核验并切片获取
print(token)
# 发送图片解析请求
url = "http://api.95man.com:8888/api/Http/Recog?Taken=" + token + "&imgtype=1&len=4"
file_path = file_path
files = {'file': open(file_path, 'rb')}
# 上传图片
r = requests.post(url, files=files)
print(r.url, r.text)
# 切片获取验证码
return r.text[8:-2]
2、输入框内文本删除/覆盖
利用pyppeteer在模拟输入时,常用的时type函数,但在使用时发现它是增加在输入框(input组件)内,如果之前有文本,并不会覆盖,而是增加,若要删除已有文本,在查阅了很多文档后,并未找到可行的方法,包括利用js脚本修改输入框的值(本人js能力较弱,试验多次反正没成功),最后选择利用模拟键盘输入的方式先删除,在录入实现了文本覆盖。
async def delete_all(page):
# 先执行Ctrl+A全选文本,再删除所选文本
await page.keyboard.down('Control');
await page.keyboard.press('KeyA');
await page.keyboard.up('Control');
await page.keyboard.press('Backspace');
if __name__=='__main__':
await page.type('#input','', {'delay': input_time_random() - 50}) # 定位输入框文本
await delete_all(page) # 删除输入库内所有文本
await page.type('#input',text, {'delay': input_time_random()}) # 录入待输入的文本
温馨提示:keyboard中的Ctrl键在使用时,用Control,其余按键可网上自搜