【2020.06】國稅總局發票查驗平臺驗證碼最新獲取方法

國稅總局的發票查驗平臺近期JS更新頻繁,之前寫了一篇驗證碼識別的文章:https://blog.csdn.net/kerlomz/article/details/105974823
有不少人私信我,問我怎麼獲取驗證碼,沒想到各位竟然栽在前一步,下面我給大家介紹一個比較簡單的辦法吧。

pypi倉庫裏有一個 https://pypi.org/project/invoice-captcha/ 項目
封裝了請求的加密參數和返回的解密參數,具體使用方法請看下面的講解:

首先搬運一下官網的示例代碼:

  1. 調用示例:

    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的文章,敬請留意。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章