news 2026/4/15 17:26:53

税务总局中文点选DrissionPage实战代码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
税务总局中文点选DrissionPage实战代码

一、简介

上面就是真实识别验证码,点击、通过的动态图。实际测试通过率99.9%。达到了一个非常完美的效果。

二、实战代码

下面是使用Python写的一个模拟点击,识别通过验证码的代码,使用了DrissionPage。点击速度大家可以自行调整,测试。也可以在下面代码基础上进行修改,与自己的业务相结合,大幅减少大家自己研究时间和开发量。

import re import time import json import base64 import random import requests from PIL import Image from io import BytesIO from DrissionPage import Chromium from DrissionPage import ChromiumPage from DrissionPage import ChromiumOptions from DrissionPage.common import Actions 验证码识别接口 可以根据自己网络情况选择不同接口 http://bq1gpmr8.xiaomy.net(电信) http://220.167.181.200:9009(移动、电信、联通) 想了解更多验证码识别,请访问:http://220.167.181.200:9009/tool/verifyCodeHomePage2/?_=1767748280984 # 用户的key key = 'qaXZNkpHniKPxw4ZYJj0' #base64编码转PIL def base64_PIL(base64_str): image = base64.b64decode(re.sub(r'data:image/.+?;base64,', '', base64_str)) image = BytesIO(image) image = Image.open(image) return image #PIL图片保存为base64编码 def PIL_base64(img, coding='utf-8'): img_format = img.format if img_format == None: img_format = 'JPEG' format_str = 'JPEG' if 'png' == img_format.lower(): format_str = 'PNG' if 'gif' == img_format.lower(): format_str = 'gif' if img.mode == "P": img = img.convert('RGB') if img.mode == "RGBA": format_str = 'PNG' img_format = 'PNG' output_buffer = BytesIO() # img.save(output_buffer, format=format_str) img.save(output_buffer, quality=100, format=format_str) byte_data = output_buffer.getvalue() base64_str = 'data:image/' + img_format.lower() + ';base64,' + base64.b64encode(byte_data).decode(coding) return base64_str # 接口识别 def shibie(img1, img2): # 图片转base64 img1_base64 = PIL_base64(img1) # 背景点击区大图 img2_base64 = PIL_base64(img2) # 点击顺序小图 # 验证码识别接口 url = "http://220.167.181.200:9009/openapi/verify_code_identify/" data = { # 用户的key "key": key, # 验证码类型 "verify_idf_id": "85", # 背景点击区大图 "img1": img1_base64, # 点击顺序小图 "img2": img2_base64, } header = {"Content-Type": "application/json"} # 发送请求调用接口 response = requests.post(url=url, json=data, headers=header) # 判断是否正确请求 if response.json()['code'] == 200: print(response.json()) return eval(response.json()['data']['res_str']) else: print('参数错误,请前往得塔云了解详情:http://bq1gpmr8.xiaomy.net/tool/verifyCodeHomePage2/?_=1714093687434') print('错误参数:', response.json()) return None # 记录是否验证通过 is_pass = None # 统计正确数量 t_num = 0 # 统计错误数量 f_num = 0 while 1: try: page = Chromium(9225).latest_tab # 访问目标网站 page.get('https://etax.zhejiang.chinatax.gov.cn:8443/') # 点击登录按钮 btn = page.ele('xpath://span[@class="loginBtn"]') btn.click() # 执行点击操作 # 填写信用代码 input = page.ele('xpath://input[@placeholder="统一社会信用代码/纳税人识别号"]') input.clear() # 清空原有内容(可选) input.input("91370800726217022E") # 填写手机号码 input = page.ele('xpath://input[@placeholder="居民身份证号码/手机号码/用户名"]') input.clear() # 清空原有内容(可选) input.input("13694853495") # 填写手机号码 input = page.ele('xpath://input[@placeholder="个人用户密码"]') input.clear() # 清空原有内容(可选) input.input("dyahohdfohwekjd") # 点击登录按钮 btn = page.ele('xpath://button[@class="el-button loginCls el-button--primary"]') btn.click() # 执行点击操作 # 等待验证码图片出现 # 判断是哪种验证码 # 单图特征:id="tpass-captcha-slider-concat-img-div" # 旋转特征:id="tpass-captcha-slider-bg-img",id="tpass-captcha-slider-move-img" # 中文特征:id="tpass-captcha-tip-img" for j in range(10000): if is_pass == None: pass elif is_pass == True: # 点击按钮 btn = page.ele('xpath://button[@class="el-button loginCls el-button--primary"]') btn.click() # 执行点击操作 elif is_pass == False: pass for i in range(10): time.sleep(1) html_str = page.html # 判断是哪种验证码 if 'id="tpass-captcha-slider-concat-img-div"' in html_str: print('滑动拼图') break elif 'id="tpass-captcha-tip-img"' in html_str: print('中文验证') # 获取图片 img_tag = page.ele('xpath://img[@id="tpass-captcha-slider-bg-img"]') # 获取图片base64 img1_base64 = img_tag.attr('src') # base64转PIL img1 = base64_PIL(img1_base64) # 获取图片 img_tag = page.ele('xpath://img[@id="tpass-captcha-tip-img"]') # 获取图片base64 img2_base64 = img_tag.attr('src') # base64转PIL img2 = base64_PIL(img2_base64) # 识别 point_list = shibie(img1, img2) print('point_list', point_list) # 计算缩放比例 zoom = 300 / img1.width actions = Actions(page) # 点击验证码 div = page.ele('xpath://div[@id="bg-img-click-mask"]') for point in point_list: actions.move_to(div, offset_x=point[0] * zoom, offset_y=point[1] * zoom, duration=.1).click() # 点击确定 btn = page.ele('xpath://div[@class="click-confirm-btn"]') btn.click() # 执行点击操作 for k in range(10): # 判断是否通过验证 id="tpass-captcha-tips" div_msg = page.ele('xpath://div[@id="tpass-captcha-tips"]') print('验证信息:', div_msg.text) if '验证失败' in div_msg.text: # 记录验证没有通过 is_pass = False f_num += 1 break elif '验证成功' in div_msg.text: # 记录验证通过 is_pass = True t_num += 1 break else: # 记录验证通过 is_pass = None time.sleep(0.5) print('正确数量:{},错误数量:{},总数量:{},正确率:{}。'.format(t_num, f_num, t_num + f_num, t_num/(t_num + f_num))) break elif 'id="tpass-captcha-slider-move-img"' in html_str: print('旋转验证') break else: continue time.sleep(2) except: pass
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/8 23:09:19

Token消耗太高?Hunyuan-MT-7B单位成本翻译字数更多

Token消耗太高?Hunyuan-MT-7B单位成本翻译字数更多 在全球化内容爆炸式增长的今天,企业与机构每天面对的是成千上万条跨语言信息——从电商商品描述到政务公文,从教育资料到科研论文。传统的机器翻译方案正面临一场“性价比危机”&#xff1a…

作者头像 李华
网站建设 2026/4/15 0:00:46

客服对话实时翻译?Hunyuan-MT-7B API延迟低于200ms

客服对话实时翻译?Hunyuan-MT-7B API延迟低于200ms 在全球化业务不断深化的今天,企业面对的是一个语言多元、文化各异的用户群体。无论是跨境电商客服响应海外买家咨询,还是跨国会议中即时传递发言内容,多语言实时沟通能力已成为服…

作者头像 李华
网站建设 2026/4/15 3:38:08

智能家居开关面板的界面设计赏析

智能家居开关面板的界面设计,核心是 “场景化交互、轻量化视觉、多感官反馈、生态化适配”. 头部品牌界面设计核心特点与代表案例 品牌 界面设计核心特点 代表系列 / 功能 界面设计亮点 华为鸿蒙智家 鸿蒙分布式 UI 蒙德里安美学,卡片化场景优先 …

作者头像 李华
网站建设 2026/4/15 8:24:43

1小时搭建:个人公网IP监控小工具

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个极简的公网IP监控原型。功能:1) 单文件Python脚本,定期查询IP;2) 检测到变化时在本地生成日志文件;3) 可选桌面通知功能。代…

作者头像 李华
网站建设 2026/4/15 8:21:48

传统调试 vs AI辅助:解决网络错误效率对比

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个效率对比工具,能够:1. 记录手动调试网络错误的全过程;2. 使用AI自动诊断相同问题;3. 统计两种方式的时间消耗和成功率&…

作者头像 李华
网站建设 2026/4/15 2:12:35

盲文转换辅助:图像转语音描述系统构建

盲文转换辅助:图像转语音描述系统构建 引言:为视障群体打造智能视觉桥梁 在数字时代,视觉信息占据了信息交互的主导地位。然而,对于全球超过3000万的视障人士而言,图像内容始终是一道难以逾越的信息鸿沟。传统的盲文系…

作者头像 李华