您的位置:首页 > 编程语言 > Python开发

【Python Web自动化】02_05获取验证码

2019-06-08 16:45 1091 查看

怎么获取验证码呢?我也很懵逼,验证码怎么处理呢?
1.最简单就是在代码中注释掉验证码呀,哈哈哈哈哈;
2.给你一个万能不变的验证码;

当然这些方法不是不行,只是不符合用户操作场景,接下就来获取验证码的问题吧…以问题驱动编码也是个不错的方式

解决思路:将整个注册页面保存下来,定位图片验证码图片的坐标,计算图片四个定点的位置,将图片验证截取;然后利用第三方库或者专门的图片验证码识别接口进行图片验证码文字的识别
GitHub代码commits id:3d95aa8

一、保存验证码图片

from PIL import Image

# 获取验证码:①先将验证码的图片保存下来;②使用第三方库识别图片中的字母
# 将注册页面的保存为图片
driver.save_screenshot("./image/register_screenshot.png")
# 定位验证码图片的位置,并截取该位置的图片
code_element = driver.find_element_by_id("getcode_num")
print(code_element.location) # {'x': 548, 'y': 523}
left = code_element.location['x']
top = code_element.location['y']
right = code_element.size['width'] + left
height = code_element.size['height'] + top
im = Image.open("./image/register_screenshot.png")
img = im.crop((left, top, right, height))
img.save("./image/code_num.png")

二、利用第三方接口识别图片文字

#!/bin/usr/env python3
# -*- coding: utf-8 -*-
# --------------------------------
# ProjectName:
# Author: Crisimple
# FileName: read_image.py
# Description: ShowapiRequest库从https://www.showapi.com/api/lookPoint/184下载
# Question:
# --------------------------------

import pytesseract
from PIL import Image

image = Image.open("./image/code_num.png")
# 这块有好多的坑.......,pytesseract只能识别规则的验证码图片,对于该例子的验证码图片不适用
# text = pytesseract.image_to_string(image)
# print(text)

# python3.6.5
# 需要引入requests包 :运行终端->进入python/Scripts ->输入:pip install requests
from ShowapiRequest import ShowapiRequest

r = ShowapiRequest("http://route.showapi.com/184-4","48120","12c017278c0845c2bcda177212d2d2ac" )
r.addBodyPara("img_base64", "")
r.addBodyPara("typeId", "35")
r.addBodyPara("convert_to_jpg", "0")
r.addBodyPara("needMorePrecise", "0")
r.addFilePara("image", r"./image/code_num.png") #文件上传时设置
res = r.post()
text = res.json()["showapi_res_body"]["Result"]
print(text) # 返回信息

三、代码整合

将获取到的验证码输入的验证码输入框中

# filename: start_broswer.py

from ShowapiRequest import ShowapiRequest

# 解析验证码图片中的文字(用第三方的图片验证码识别接口 ShowApiRequest)
r = ShowapiRequest("http://route.showapi.com/184-4","my_appId","my_appSecret")
r.addBodyPara("img_base64", "")
r.addBodyPara("typeId", "35")
r.addBodyPara("convert_to_jpg", "0")
r.addBodyPara("needMorePrecise", "0")
r.addFilePara("image", r"./image/code_num.png") #文件上传时设置
res = r.post()
text = res.json()["showapi_res_body"]["Result"]
captcha_code.send_keys(text)
time.sleep(3)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: