赞
踩
国税总局的发票查验平台近期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的文章,敬请留意。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。