验证码破解初体验

2020-05-20  本文已影响0人  今天也是努力的小张

一、验证码

1. 验证码出现的地方
2. 验证码分类

任何验证码都可以使用selenium手动输入

二、Selenium手动打码

1. 原理

结合selenium配合可视化浏览器来完成

2. 学习一个新组合:selenuim+IE浏览器

配置参考:https://www.cnblogs.com/misswjr/p/9453566.html

3. 学习案例-发票真伪验证
import time
from selenium.webdriver.common.keys import Keys


def verify_fp():
    from selenium import webdriver
    # 创建浏览器驱动
    driver = webdriver.Ie()
    # 请求url
    driver.get('https://inv-veri.chinatax.gov.cn/')
    # 等待
    # driver.implicitly_wait(20)
    time.sleep(5)
    # 添加发票代码
    driver.find_element_by_xpath('//*[@id="fpdm"]').send_keys('044031900211')
    driver.find_element_by_xpath('//*[@id="fphm"]').send_keys('28780009')
    driver.find_element_by_xpath('//*[@id="kprq"]').send_keys('20200417')
    driver.find_element_by_xpath('//*[@id="kjje"]').send_keys('227437')
    # driver.find_element_by_xpath('//*[@id="yzm_img"]').click()
    
    while True:
        # 清空输入款
        driver.find_element_by_xpath('//*[@id="yzm"]').send_keys(Keys.CONTROL, 'a')
        driver.find_element_by_xpath('//*[@id="yzm"]').send_keys(Keys.CONTROL, 'x')
        code = input('输入验证码:')
        driver.find_element_by_xpath('//*[@id="yzm"]').send_keys(code)
        time.sleep(5)
        driver.find_element_by_xpath('//*[@id="checkfp"]').click()
        time.sleep(5)
        if '3999.0' in driver.page_source:
            print('发票为真!')
            break
        print('验证码错误,重新输入!')


if __name__ == '__main__':
    verify_fp()

driver就是一个浏览器对象,不管自动做操作,还是人为手动做操作,都可以影响driver。如果要设置人为操作,一定要注意等待的问题

三、打码平台

1. 介绍

打码平台有很多:云打码,斐斐打码,超级鹰。打码平台的作用就是发送请求到指定端口,等待返回数据。

2. 学习案例-超级鹰为例

(1)网址:http://www.chaojiying.com/
(2)注册账号和密码
(3)查看开发文档 -> 选择python语言 -> 左侧选择扩平台HTTP标准WEB接口
(4)从开发文档中,找到:接口地址、请求方式、参数设置等信息。
(5)请求url,得到response,response里面就是验证码识别的内容。

import requests
import base64


def verify_code(imge_filename, code_type='1004'):
    '''
    :param imge_filename: 验证码图片文件路径
    :code_type='1004':验证码的类型,1004:1-4为英文数字,详细请查看:http://www.chaojiying.com/price.html
    :return: 验证码图片的内容
    '''
    base_url = 'http://upload.chaojiying.net/Upload/Processing.php'
    fp = open(imge_filename, 'rb')
    imag_str = base64.b64encode(fp.read())
    # 0
    data = {
        'user': '13016031459',
        'pass2': 'ad946e260f74e67a48092d735c75e1c4',
        'softid': '903750',
        'codetype': code_type,  # 验证码的类型
        'file_base64': imag_str,
    }
    response = requests.post(base_url, data=data)
    # print(response.json())
    if response.json()['err_no']=='0':
        return response.json()['pic_str']


if __name__ == '__main__':
    # fp = open('CheckCode.png','rb')
    filename = 'code.png'
    code_str = verify_code(filename)

按超级鹰提供的步骤做

四、综合学习案例-RPA财务机器人之发票真伪验证

1. RPA是什么
2. RPA的价值

(1)降低人力资源花费,人力成本节省 30%;
(2)解决了繁杂的运行和业务逻辑,可以合理地回应单位专业知识基本建设的必须,解决 工作人员变化的风险性。
(3)让职工从繁杂、低价值的劳动者中摆脱出去,从业高些价值、创造力的工作中。
(4)RPA 机器人可以二十四小时工作,提升单位的服务能力。

3. 项目需求
4. 技术学习要点

(1)结合第三方平台(百度 AI)进行发票内容识别。
(2)使用 selenium 进入发票真伪检验的网站对发票真伪进行验证。
(3)使用打码平台进行发票真伪验证码的识别。

5. 实现

import requests, time
from selenium.webdriver.common.keys import Keys


def get_token():
    '''
    获取:Access Token
    :return:
    '''
    # client_id 为官网获取的AK, client_secret 为官网获取的SK
    host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=N6hI5qgy5VSGmhg78pEfCcNb&client_secret=ZOjCFgEZjHYBYK14frNBQi3uCqTXX8S9'
    response = requests.get(host)
    if response:
        # print(response.json())
        return response.json()['access_token']


def shibie_fp(access_token,filename):
    import base64

    '''
    增值税发票识别
    '''

    request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/vat_invoice"
    # 二进制方式打开图片文件
    f = open(filename, 'rb')
    img = base64.b64encode(f.read())

    params = {"image": img}
    access_token = access_token
    request_url = request_url + "?access_token=" + access_token
    headers = {'content-type': 'application/x-www-form-urlencoded'}
    # requests模块对于你输入url,自动回进行url编码
    response = requests.post(request_url, data=params, headers=headers)
    if response:
        # print(response.json())
        # InvoiceNum:发票号码
        # InvoiceDate:发票日期
        # InvoiceCode:发票代码
        # CheckCode:发票的校验码
        # TotalAmount:发票金额
        item = {}
        InvoiceDate = response.json()['words_result']['InvoiceDate']
        item['InvoiceNum'] = response.json()['words_result']['InvoiceNum']
        item['InvoiceDate'] = InvoiceDate.replace('年','').replace('月','').replace('日','')
        item['InvoiceCode'] = response.json()['words_result']['InvoiceCode']
        item['CheckCode'] = response.json()['words_result']['CheckCode'][-6:]
        item['TotalAmount'] = response.json()['words_result']['TotalAmount']
        print(item)
        return item


def verify_fp(item):
    from selenium import webdriver
    # 创建浏览器驱动
    driver = webdriver.Ie()
    # 请求url
    driver.get('https://inv-veri.chinatax.gov.cn/')
    # 等待
    # driver.implicitly_wait(20)
    time.sleep(5)
    # 添加发票代码
    driver.find_element_by_xpath('//*[@id="fpdm"]').send_keys(item['InvoiceCode'])
    driver.find_element_by_xpath('//*[@id="fphm"]').send_keys(item['InvoiceNum'])
    driver.find_element_by_xpath('//*[@id="kprq"]').send_keys(item['InvoiceDate'])
    driver.find_element_by_xpath('//*[@id="kjje"]').send_keys(item['CheckCode'])
    # driver.find_element_by_xpath('//*[@id="yzm_img"]').click()

    while True:
        #清空输入款
        driver.find_element_by_xpath('//*[@id="yzm"]').send_keys(Keys.CONTROL,'a')
        driver.find_element_by_xpath('//*[@id="yzm"]').send_keys(Keys.CONTROL,'x')
        code = input('输入验证码:')    # 阻塞方法
        driver.find_element_by_xpath('//*[@id="yzm"]').send_keys(code)
        time.sleep(5)
        driver.find_element_by_xpath('//*[@id="checkfp"]').click()
        time.sleep(5)
        if '3999.0'  in driver.page_source:
            print('发票为真!')
            break
        print('验证码错误,重新输入!')


if __name__ == '__main__':
    # 获取token
    access_token = get_token()
    filename = 'fapiao2.png'
    # 识别增值税发票
    item = shibie_fp(access_token,filename)
    # print(item)
    # 通过财务网站验证发票真伪
    verify_fp(item)
tips:百度AI开发平台的使用(待补充)
上一篇 下一篇

猜你喜欢

热点阅读