國稅總局的發票查驗平臺近期JS更新頻繁,之前寫了一篇驗證碼識別的文章:https://blog.csdn.net/kerlomz/article/details/105974823
有不少人私信我,問我怎麼獲取驗證碼,沒想到各位竟然栽在前一步,下面我給大家介紹一個比較簡單的辦法吧。
pypi倉庫裏有一個 https://pypi.org/project/invoice-captcha/ 項目
封裝了請求的加密參數和返回的解密參數,具體使用方法請看下面的講解:
首先搬運一下官網的示例代碼:
-
調用示例:
import requests from invoice_captcha.utils import get_captcha_params, parse_captcha_resp, kill_captcha_fast, ua CAPTCHA_URL = "https://fpcy.guangdong.chinatax.gov.cn/NWebQuery/yzmQuery" # 發票代碼 key1 = "011111111111" # 發票號碼 key2 = "11111111" # # 開票日期 # key3 = "20200603" # # 校驗碼或發票金額 # key4 = "000000" def fetch_captcha(invoice_code, invoice_no): sess = requests.Session() # 使用代理,需要自備代理 # sess.proxies = proxy sess.headers = {"User-Agent": ua.random} # 獲取驗證碼請求參數 payload = get_captcha_params( invoice_code=invoice_code, invoice_no=invoice_no ) # 通過官網獲取驗證碼 r = sess.get(CAPTCHA_URL, params=payload) # 驗證碼請求參數解密 plain_dict = parse_captcha_resp(r) # 驗證碼請求返回明文 # key1 圖片base64 # key4 驗證碼需要識別的顏色代碼 print("解密參數 --- ", plain_dict) # 調用識別測試接口 captcha_text = kill_captcha_fast( plain_dict, # 默認API有使用次數限制,可聯繫作者QQ:27009583,測試獨立接口 # api="http://kerlomz-ac86u.asuscomm.com:19811/captcha/v1" ) # 輸出識別結果 print("識別結果 --- ", captcha_text) if __name__ == '__main__': for i in range(10): fetch_captcha(key1, key2)
經過剖析,這個sdk分爲兩個部分,一個是用於獲取驗證碼的參數生成函數get_captcha_params()
,另一個是用於解析官網返回的加密報文的函數parse_captcha_resp()
,筆者發現,請求參數和解析報文的函數共享了一個now_time變量,這意味這該項目不支持多線程併發,但用於一般的研究學習使用應該是足夠了。kill_captcha_fast()
對接了一個測試接口,這個接口可以變更,方便使用者自己修改。筆者後面將開闢一篇專門講解JS的文章,敬請留意。