如何呼叫showapiRequest解決圖片驗證碼識別?

2020-08-12 22:06:06

一、思路(我埋了一個坑)

(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 requests

r = 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")