使用selenium手动打码
本案例使用的网站是国家发票查验平台,需要使用IE浏览器才能正常访问,因此请按照第六讲中的教程完成相关配置。在者准备一张发票,京东电子发票即可。https://inv-veri.chinatax.gov.cn/
该案例除了配置IE浏览器外,主要有两点:
- 实践显示等待的语法
wait.until(EC.presence_of_element_located((By.XPATH, '//td[@id="imgarea"]/div/a'))).click()
EC是导包时expected_conditions的别名,presence_of_element_located指元素显示为条件,括号内的参数注意是元组,(By.xpath/id/css_selector,‘对应的语法’),不是括号内有两个元素。
- 程序堵塞的用法
由于验证码人工输入和AI识别、打码平台都需要一定的时间,因此在得到验证码之前程序堵塞必不可少,可以用input方法人工堵塞,也可以使用显示等待以某个参照元素为条件。
该案例的完整代码如下:
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
def open_ie():
"""
请求并输入参数
:return:
"""
# 1、请求url
driver.get('https://inv-veri.chinatax.gov.cn/')
# 2、使用显示等待输入
# 发票代码
wait.until(EC.presence_of_element_located((By.ID, 'fpdm'))).send_keys('输入发票代码')
# 发票号码
wait.until(EC.presence_of_element_located((By.ID, 'fphm'))).send_keys('输入发票号码')
# 开票日期
wait.until(EC.presence_of_element_located((By.ID, 'kprq'))).send_keys('输入开票日期')
# 校验码
wait.until(EC.presence_of_element_located((By.ID, 'kjje'))).send_keys('输入校验码后六位')
def main():
"""
程序的主线任务
:return:
"""
# 1输入发票信息
open_ie()
# 2点击图片加载验证码
wait.until(EC.presence_of_element_located((By.XPATH, '//td[@id="imgarea"]/div/a'))).click()
# 技术点二
yzm = input('请输入验证码:') # 阻塞
# 3、输入验证
wait.until(EC.presence_of_element_located((By.ID, 'yzm'))).send_keys(yzm)
# 点击验证
wait.until(EC.presence_of_element_located((By.ID, 'checkfp')))
if __name__ == '__main__':
driver = webdriver.Ie()
# 最高等待20s
wait = WebDriverWait(driver, 20)
main()
百度AI文字识别发票信息
步骤一:在百度 AI 网站找到发票识别的接口信息。
- 百度搜索百度AI,进入官网
点击进入控制台
注册并登录账号:
选择产品服务–>人工智能下的文字识别,点击进入