一、思路(我埋了一个坑)
(1)保存整张登录页面的图片
(2)剪切验证码区域的图片
(3)调用showapiRequest识别剪切好的图片
二、保存整张图片
- 保存当前页面的整张图片
- 括号里面是保存图片的路径
driver.save_screenshot(”D:\web_selenium1\image1.png“)
三、剪切验证码区域图片
- element_code是验证码的定位元素
- element_code.location得到的是验证码左上角的坐标
- 先打开image1.png图片,然后用crop进行剪切
left = element_code.location['x']
top = element_code.location['y']
right = element_code.size['width'] + left
height = element_code.size['height'] + top
im = Image.open(”code_image/image1.png“) #绝对路径
img = im.crop((left,top,right,height)) #注意是元组
img.save("D:\web_selenium1\image2.png")
四、调用showapiRequest识别剪切好的图片
4.1、购买第三方包
- 打开https://www.showapi.com/apiGateway/view?apiCode=184网站,只要一角钱,也可以用阿里云,腾讯云的。
4.2、下载SDK
- 注意如果你用的是python语言,记得切换语言
4.3、把下载好的py文件放在,工程目录下
4.4、调用模板并更改参数
- 查看文档,弄懂参数代表什么
from selenium import webdriver
from ShowapiRequest import ShowapiRequest
from PIL import Image# python3.6.5
# 需要引入requests包 :运行终端->进入python/Scripts ->输入:pip install requestsr = ShowapiRequest("http://route.showapi.com/184-4","323291","866123e8786b41dd9b9f4ef2d8da1c88" )
r.addFilePara("image", "code_image/image2.png")
r.addBodyPara("typeId", "14")
r.addBodyPara("convert_to_jpg", "0")
r.addBodyPara("needMorePrecise", "0")
res = r.post()
text = res.json()["showapi_res_body"]["Result"]
print(text)
五、填坑
当你把上面的思路弄懂,敲出代码后,发现crop剪切不了完整的二维码
原因:你电脑的分辨率是150%
-解决办法1:
- 把电脑分辨率改成100%
-解决办法2:
- 不改分变率,把验证码改成和150%分辨率匹配的大小
driver.save_screenshot("code_image/image1.png")
left = element_code.location['x'] * 1.5
top = element_code.location['y'] * 1.5
right = element_code.size['width'] * 1.5 + left
height = element_code.size['height'] * 1.5 + top
im = Image.open("code_image/image1.png")
img = im.crop((left,top,right,height))
img.save("code_image/image2.png")