【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)
相关文章推荐
- python-selenium(webdriver)中的自动截屏并获取验证码的位置
- 基于Selenium的web自动化框架(python)
- Python写自动化之获取文件的MD5值
- Selenium2学习-023-WebUI自动化实战实例-021-获取浏览器显示区域大小,通过 WebDriver 截图功能
- 轻松自动化---selenium-webdriver(python) (一)
- HttpWebRequest 获取验证码的图片 并针对有验证码的网页进行Winform登陆。
- Splinter 基于Python的WEB自动化框架
- python 获取微信好友列表(微信web)
- 16_python_练习题——使用webdriver获取当前页面截屏以及滑动页面
- python 自动化运维 监测web质量
- Python爬虫之web内容获取(一)
- Day 14-02 Struts通过ActionContext获取WEB资源
- 【脚本语言系列】关于PythonWeb服务自动化BeautifulSoup,你需要知道的事
- Python Web开发-Django2.0学习02
- python解决接口测试获取手机验证码问题
- python解决接口测试获取手机验证码问题
- 轻松自动化---selenium-webdriver(python) (一)
- 获取web服务器的返回信息(封装方法)——python语法
- 轻松自动化---selenium-webdriver(python) (四)--如何定位一组元素?