打印英语四六级准考证pdf

打印英语四六级准考证

注意点:
1.你必须具备一个能知道自己身份的资料
2.你还需要有第三方的验证码接口,其实不贵,1元可以500次,直接搜快识别注册就可以了
3.使用ip代理(不推荐,这是不合法的),当你爬到某次数时,会限制你爬取。(这还在学)
下面上代码:

import base64
import json
import time  # 计算耗费时间
import pymysql  # 连接数据库,由于我把数据存在数据库里面的
import requests
from selenium import webdriver

# 就是点提交的时候判断是否有弹框出现
def isElementExist():
    flag = True
    try:
        driver.find_element_by_css_selector('body > div.panel.window.panel-htop.messager-window')
        return flag
    except:
        flag = False
        return flag

# 第三方验证码API接口,我这里用的是快识别的接口,我觉得接近99.8%的正确率
def base64_api(uname, pwd, img, typeid):
    with open(img, 'rb') as f:
        base64_data = base64.b64encode(f.read())
        b64 = base64_data.decode()
    data = {"username": uname, "password": pwd, "typeid": typeid, "image": b64}
    result = json.loads(requests.post("http://api.ttshitu.com/predict", json=data).text)
    if result['success']:
        return result["data"]["result"]
    else:
        return result["message"]
    return ""

# 具体逻辑代码
def input_content(key,cname):
    time.sleep(3)
    # 选择省份按钮
    driver.find_element_by_css_selector('#selProvince > option:nth-child(18)').click()
    time.sleep(2)
    # 选择身份证类别按钮
    driver.find_element_by_css_selector('#selIDType > option:nth-child(2)').click()
    time.sleep(3)
    # 自动填写身份证
	driver.find_element_by_css_selector('#txtIDNumber').send_keys(key)
    time.sleep(1)
    # 自动填写米子按钮
    driver.find_element_by_css_selector('#txtName').send_keys(cname)
    # 截取图片
    img_label = driver.find_element_by_css_selector('#vcodeImg')
    time.sleep(2)
    # 截图保存本地,并发送给第三方。
    img_label.screenshot('yanzhengma.png')
    # 获得验证码
    result = base64_api(uname='你的快识别用户名', pwd='你的跨识别密码', img='验证码保存的路径在哪', typeid=3)
    # 发送验证码
    time.sleep(1)
    # 填写第三方发送的验证码
    driver.find_element_by_css_selector('#txtVerificationCode').send_keys(result)
    # 点击登录按钮
    time.sleep(4)
    driver.find_element_by_css_selector('#ibtnLogin').click()
    # 这里看是否有弹框,因为点击提交时,有可会有错误,验证码错误,或者给同学没有报名,所以必须判断
    result = isElementExist()
    print(result)
    # 为真有弹框弹出
    if result:
    	# 点击弹框里面的内容
        a = driver.find_element_by_css_selector('body > div.panel.window.panel-htop.messager-window > div.messager-body.panel-body.panel-body-noborder.window-body > div:nth-child(2)').text
        # 把验证错误的记录下来,并保存到文件中,以便查看
        if a== '验证码错误':
            with open('c.txt', mode='a', encoding='utf-8') as f:
                f.write(str(cname))
                f.write(str(key))
        print('================================',a , key, cname)
        # 点击弹框的确定按钮
        driver.find_element_by_css_selector(
            'body > div.panel.window.panel-htop.messager-window > div.dialog-button.messager-button > a').click()
         # 点击首页按钮
        driver.find_element_by_css_selector('#nav > div > ul > li:nth-child(2) > a').click()
        time.sleep(2)
        # 点击快速进入准考证按钮
        driver.implicitly_wait(5)
        driver.find_element_by_css_selector('#main_l > a.c_hei.cet_banner06').click()

    else:
        time.sleep(2)
        # 点击下载pdf按钮
        driver.find_element_by_css_selector('tbody > tr > td:nth-child(2) > a').click()
        time.sleep(6)
        # 首页按钮
        driver.find_element_by_css_selector('#nav > div > ul > li:nth-child(2) > a').click()
        time.sleep(2)
        # 进入按钮
        # 智能等待时间
        driver.implicitly_wait(5)
        driver.find_element_by_css_selector('#main_l > a.c_hei.cet_banner06').click()

# 连接我自己的数据库
def connect_db():
    db = pymysql.connect(host='localhost',
                         user='root',
                         password='数据库密码',
                         database='数据库名称',
                         port=3306,
                         charset='utf8')
    cursor = db.cursor()
    cursor.execute('select sname,carid from dangzhibu where cid not like "2016%"')
    db.commit()
    # 返回所有的结果
    result = cursor.fetchall()
    cursor.close()
    db.close()
    return result

lis = list(connect_db())  # 连接数据库返回的结果
# 返回一个浏览器对象
driver = webdriver.Edge('C:\Program Files (x86)\Microsoft\Edge\Application\msedgedriver.exe')
driver.get('http://cet-bm.neea.edu.cn/Home/QuickPrintTestTicket')
# 浏览器最大化
driver.maximize_window()
# 遍历所有数据库查询到的信息
# 如果没有数据库,可以直接调用input_content(身份证号,名字),不需要数据库
for i in lis:
    input_content(i[1],i[0])
    time.sleep(5)

总结:再写这个的时候还是遇见一些问题,比如怎么判断弹框是否出现,还有休眠时间的设置,这些都是一个很大的问题,特别是休眠时间需要把握,如果快了,按钮没有出来就需要点,结果就报错了。这个也可以用多线程,但是尽量不要用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值