国税局验证码识别 识别不了我还不能input吗

news2024/12/28 19:56:17

前言

最近接到一个需求,就是在国税局的网页中输入

【发票代码】、【*发票号码】、【*开票日期】、【*开具金额(不含税)】、【*验证码】

然后将此发票进行下载,但是【验证码】真的是拦路虎啊,我也查询了好多大佬的论文,有的是通过JS逆向(我一个小白根本看不懂),有的是通过打码平台,我自己也注册了一个,确实可以,但是还是对国税局的验证码无效,因为国税局的验证码,有颜色区别,有的不要颜色,如下图,所以打码平台是能全部识别出来,但是无法进行颜色识别

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

所以我决定当代码执行到这里,就进行 input 手动输入,俗称人工解码,笑死

展示视频:

在这里插入图片描述

解决思路

1、目录结构

文件夹:【数据源】:用来存放发票信息

注意:时间格式:如2022-12-12 应写成:20221212

chromedriver.exe:selenium谷歌驱动器

根据自己谷歌版本下载:点我官网下载

在这里插入图片描述

2、读取数据源(代码如下)

'''
每一行转成列表,个人习惯
'''
df = pd.read_excel('./数据源/'+os.listdir("./数据源/")[0], sheet_name=0, dtype=str, keep_default_na='')
data = df.values.tolist()

3、selenium驱动浏览器(代码如下)

chrome_options = Options()
chrome_driver = "./chromedriver.exe"
driver = webdriver.Chrome(chrome_driver, chrome_options=chrome_options)
driver.get("https://inv-veri.chinatax.gov.cn/")

4、奉上完整版代码


import pandas as pd
import time,os
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait

# cd C:\Program Files (x86)\Google\Chrome\Application & chrome.exe --remote-debugging-port=9222 --user-data-dir="D:\selenum\AutomationProfile"

# url : https://inv-veri.chinatax.gov.cn/
t1 = time.time()

df = pd.read_excel('./数据源/'+os.listdir("./数据源/")[0], sheet_name=0, dtype=str, keep_default_na='')
data = df.values.tolist()


chrome_options = Options()
# chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
chrome_driver = "./chromedriver.exe"
driver = webdriver.Chrome(chrome_driver, chrome_options=chrome_options)
driver.get("https://inv-veri.chinatax.gov.cn/")
count2 = 0



for i in data[3:4]:
    # 发票代码
    WebDriverWait(driver, 5, 0.5).until(
        EC.presence_of_element_located((By.XPATH, '//input[@id="fpdm"]')))

    time.sleep(0.2)
    fpdm = driver.find_element_by_xpath('//input[@id="fpdm"]')
    time.sleep(0.2)
    fpdm.clear()
    fpdm.send_keys(i[0])
    time.sleep(0.1)

    # 发票号码
    WebDriverWait(driver, 5, 0.5).until(
        EC.presence_of_element_located((By.XPATH, '//input[@id="fphm"]')))

    time.sleep(0.2)
    fphm = driver.find_element_by_xpath('//input[@id="fphm"]')
    time.sleep(0.2)
    fphm.clear()
    fphm.send_keys(i[1])
    time.sleep(0.1)

    # 开票日期
    WebDriverWait(driver, 5, 0.5).until(
        EC.presence_of_element_located((By.XPATH, '//input[@id="kprq"]')))

    time.sleep(0.2)
    kprq = driver.find_element_by_xpath('//input[@id="kprq"]')
    time.sleep(0.2)
    kprq.clear()
    print(i[2])
    # 20221201
    kprq.send_keys(i[2].split(" ")[0].replace('-',""))

    # 20221201
    kprq.send_keys(i[2].split(" ")[0].replace('-', ""))

    time.sleep(0.2)

    # 开具金额
    WebDriverWait(driver, 5, 0.5).until(
        EC.presence_of_element_located((By.XPATH, '//input[@id="kjje"]')))

    time.sleep(0.2)
    kjje = driver.find_element_by_xpath('//input[@id="kjje"]')
    time.sleep(0.2)
    kjje.clear()
    time.sleep(0.1)
    kjje.send_keys(i[3])
    time.sleep(0.1)

    # 验证码
    WebDriverWait(driver, 5, 0.5).until(
        EC.presence_of_element_located((By.XPATH, '//input[@id="yzm"]')))

    time.sleep(0.2)
    yzm = driver.find_element_by_xpath('//input[@id="yzm"]')
    time.sleep(0.2)
    yzm.clear()
    yzm2 = input("请输入验证码:")
    time.sleep(0.2)
    yzm.send_keys(yzm2)
    time.sleep(0.1)

    # 查验
    WebDriverWait(driver, 5, 0.5).until(
        EC.presence_of_element_located((By.XPATH, '(//button[contains(text(),"查")])[2]')))

    time.sleep(0.1)
    cy = driver.find_element_by_xpath('(//button[contains(text(),"查")])[2]')
    time.sleep(0.1)
    cy.click()
    time.sleep(0.5)

    driver.switch_to.frame(driver.find_element_by_id("dialog-body"))
    # download
    time.sleep(0.1)
    dd = driver.find_element_by_xpath('//button[@id="pdfDownNow"]')
    time.sleep(0.5)
    dd.click()
    time.sleep(0.5)
    driver.switch_to.default_content()
    time.sleep(0.2)


    # down()
    windows = driver.window_handles
    driver.switch_to.window(windows[-1])
    time.sleep(0.2)
    WebDriverWait(driver, 5, 0.5).until(
        EC.presence_of_element_located((By.XPATH, '(//div[@class="button"])[3]')))
    time.sleep(0.2)
    dd2 = driver.find_element_by_xpath('(//div[@class="button"])[3]')
    time.sleep(0.2)
    dd2.click()
    time.sleep(0.25)
    driver.close()
    time.sleep(0.8)

    windows = driver.window_handles
    driver.switch_to.window(windows[0])
    # 回到下载页面,点击关闭
    driver.switch_to.frame(driver.find_element_by_id("dialog-body"))
    # download
    time.sleep(0.1)
    dd = driver.find_element_by_xpath('//button[@id="closebt"]')
    time.sleep(0.25)
    dd.click()
    time.sleep(0.2)
    driver.switch_to.default_content()
    time.sleep(0.2)

    time.sleep(1)

希望对大家有帮助

致力于办公自动化的小小程序员一枚

致力于写出清楚的博客

都看到这了,关注+点赞+收藏=不迷路!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/84409.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OTP语音芯片ic的工作原理,以及目前的现状和技术发展路线是什么?flash型

目录 otp工艺和flash工艺的区别和概念 衡量一个芯片的成本,简单可以归结为3个方面 芯片的生产工艺,比如OTP的工艺都是100nm左右的工艺、8寸晶圆,很便宜。并且OTP的技术需要光刻机光照的次数少,所以生产起来快,这样无…

openCV实战项目--人脸考勤

人脸任务在计算机视觉领域中十分重要,本项目主要使用了两类技术:人脸检测人脸识别。 代码分为两部分内容:人脸注册 和 人脸识别 人脸注册:将人脸特征存储进数据库,这里用feature.csv代替人脸识别:将人脸特…

【云计算与大数据技术】数据编码LZSS算法、Snappy压缩库及分布式通信系统的讲解(图文解释 超详细)

一、数据编码概述 数据编码概述 - 在分布式系统中需要处理大量的网络数据,为了加快网络数据的传输速度,通常需 要对传输数据进行编码压缩 数据压缩是以尽可能少的数码来表示信源所发出的信号,减少容纳给定的消息集合或数据采样集合的信号空间,这里讲的…

Linux安装Maven

目录 1.下载安装包 2.解压Maven 3.添加环境变量 4.检测Maven是否搭建成功 5. 编辑 Maven的settings.xml文件 5.1设置本地仓库 5.2添加阿里云镜像 1.下载安装包 访问查看需要的版本:Index of /dist/maven (apache.org) 安装包统一存放到/opt/software目录下…

Java基于springboot校园德育活动预约和评分管理系统+vue+elementUI

本系统结合计算机系统的结构、概念、模型、原理、方法,在计算机各种优势的情况下,采用JAVA语言,结合SpringBoot框架与Vue框架以及MYSQL数据库设计并实现的。本校园德育活动预约和评分管理系统主要包括个人中心、学生管理、活动信息管理、活动…

使用Docker实现容器之间的互通

目录 怎样实现容器之间的相互通信? 情况1:两个容器在同一网段上 情况2:两个容器在不同网段上 怎样实现容器之间的相互通信? 情况1:两个容器在同一网段上 命令拓展: 删除所有容器:docker rm …

NuSences 数据集解析以及 nuScenes devkit 的使用

文章目录一、官网介绍1.1 总览(Overview)1.1.1 数据搜集(Data collection)1.1.2 传感器同步(Sensor synchronization)1.2 数据格式(Data format)attributecalibrated_sensorcategoryego_poseinstancelidarseglogmapsamplesample_a…

安装包UI美化之路-升级安装与静默安装一键打包

在实际应用中,除了产品安装外,还需要能够持续升级到新的版本,这时候升级方案就显得比较重要;而还有一些使用场景,需要咱们的安装包在安装时,不要显示安装界面,直接在后台进行安装! …

测试开发之前端篇-Web前端简介

自从九十年代初,人类创造出网页和浏览器后,Web取得了长足的发展,如今越来越多的企业级应用也选择使用Web技术来构建。 前面给大家介绍网络协议时讲到,您在阅读这篇文章时,浏览器是通过HTTP/HTTPS协议向服务器发送请求…

Python+Django的高考志愿填报辅助系统 计算机毕业设计

在各学校的教学过程中,学生的高考志愿填报辅助是一项非常重要的事情。随着计算机多媒体技术的发展和网络的普及,“基于网络的学习模式”正悄无声息的改变着传统的教室学习模式,“基于网络的教学平台”的研究和设计也成为教育技术领域的热点课…

音频转文字怎么转?三个方法教你音频转文字

昨天,朋友给我发了一条信息,大概的内容是“今天上班的时候,领导突然发了一段音频,说是会议的录音,让我朋友在下班之前整理成会议纪要发给他。无奈,我的朋友只能打开录音开始整理”。听到他还在听录音手动整…

Stata中的治疗效果:RA:回归调整、 IPW:逆概率加权、 IPWRA、 AIPW

今天的主题是Stata中的治疗效果。最近我们被客户要求撰写关于治疗效果的研究报告,包括一些图形和统计输出。 治疗效果估算器根据观察数据估算治疗对结果的因果关系。 我们将讨论四种治疗效果估计量: RA:回归调整IPW:逆概率加权I…

【卡尔曼滤波器】递归算法

大家好,我是小政。最近在学习卡尔曼滤波,本篇文章记录一下我学习的卡尔曼滤波器中的递归算法,通过举例子让大家更加清晰理解递归到底是什么?希望与同是卡尔曼滤波研究方向的同学进行一些交流。 递归算法1.为什么要用卡尔曼滤波器&…

zookeeper3.6.3升级jetty9.4.47解决安全漏洞CVE-2022-2048和CVE-2021-28169

客户扫描到zookeeper有CVE-2022-2048和CVE-2021-28169安全漏洞要求修复。 漏洞和官方解决办法如下: 一、# CVE-2022-2048 Jetty升级到这几个修复版本9.4.47. 10.0.10, 11.0.10 Eclipse Jetty 存在安全漏洞,该漏洞源于无效的 HTTP/2 请求可能占用连接导致…

视频配音怎么制作?手把手教你配音视频制作

相信很多短视频的创作者都知道,每个视频的好坏大多数取决于配音的效果,好的配音才能给观众留下一个深刻的印象,如果你想要制作一个好的视频,那肯定是离不开配音制作的。那你们知道视频配音怎么制作吗?不知道也没关系&a…

java计算机毕业设计ssm在线实验室器材设备借用管理系统42c93(附源码、数据库)

java计算机毕业设计ssm在线实验室器材设备借用管理系统42c93(附源码、数据库) 项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都…

“为什么同样是跳槽,有些人薪资就能翻2倍?“是我在软件测试路上走错了方向?

“为什么同样是跳槽,有些人薪资能翻两三倍?” 最近遇到一个朋友跟我吐槽如上,其实类似这样的问题我也听到过很多次,身边也不乏有认识的同事、朋友们通过跳槽拿下高薪,这里我先说一个我身边真实的例子: 学…

Java基于springboot高考填报志愿综合参考系统 vue+elementUI

高考填报志愿综合参考系统是针对目前高考填报志愿管理的实际需求,从实际工作出发,对过去的高考填报志愿综合参考系统存在的问题进行分析,完善用户的使用体会。采用计算机系统来管理信息,取代人工管理模式,查询便利&…

(十一)数据归一化方法BN/LN/GN/IN

文章目录0. Introduction1.Batch Normalization3.Layer Normalization4.Group Normalization6.Instance Normalization参考资料欢迎访问个人网络日志🌹🌹知行空间🌹🌹 0. Introduction 在神经网络的训练过程中,网络的…

机器学习分类算法之逻辑回归

1、基础知识: 逻辑回归:logistic regression二分类:binary classification 类别一类别二noysefalsetrue01negative classpositive class 线性回归模型用于分类,效果一般;逻辑回归是最广泛使用的分类算法;…