前言

本来新学期开学已经累成狗了,结果突然又来了一个入学教育考试之研究生手册考试。。。
谁会没事做去翻那个玩意啊,简直是浪费生命。但是又不能随便答题,因为学校要求必须要考94分以上才算过,只能错6分,还只有5次机会,简直了。。
不过好在有班长大佬敏锐的观察力发现了一些奥秘,在考试网站里面F12查看源码的时候,发现了存在于tbody标签下的每道题都隐藏了一个input标签,标签里面的value元素的一串十六进制值对应的就是选项ABCD,只不过被某种奇怪的方式加密了。例如应该选A的题,值就显示的 DB36F25F5F9A818E。。
这样一看,只要写个脚本我就可以轻松的拿到所有的答案了,这岂不是喜大普奔!正好荒废了一个暑假,很久没写东西了,就突然想写一个玩玩

使用语言是Python,需要用到Beautiful Soup库,写过爬虫的应该都很熟练这个库了吧。。。
只支持选择题和判断题orz

具体源码

from bs4 import BeautifulSoup


def shu_ru():
    html_doc = input('请输入<tbody>标签下的全部文本:')
    return html_doc


def find_all_answer(tag):
    return tag.has_attr('id') and tag.has_attr('runat') and tag.get('id').startswith('HidDTanswer')


def find_all_answer_pd(tag):
    return tag.has_attr('id') and tag.has_attr('runat') and tag.get('id').startswith('HidPDTanswer')


def code_change_dan_xuan(k=1, key=[], e_code=[]):
    html_doc = shu_ru()
    soup = BeautifulSoup(html_doc, 'html.parser')
    doc = soup.find_all(find_all_answer)
    list_len = int(len(doc))
    while k <= list_len:
        a_key = str(doc[k-1])
        b_key = a_key.split('value="')[1].split('"/')[0]
        e_code.append(b_key)
        k += 1
    for i in e_code:
        if i == 'DB36F25F5F9A818E':
            new_code = 'D'
            key.append(new_code)
        elif i == '61FDAC63DE16B5B0':
            new_code = 'C'
            key.append(new_code)
        elif i == 'E0934C68C11135D4':
            new_code = 'B'
            key.append(new_code)
        elif i == '605B68CC7AD4670B':
            new_code = 'A'
            key.append(new_code)
    return key


def code_change_pd(k=1, key=[], e_code=[]):
    html_doc = shu_ru()
    soup = BeautifulSoup(html_doc, 'html.parser')
    doc = soup.find_all(find_all_answer_pd)
    list_len = int(len(doc))
    while k <= list_len:
        a_key = str(doc[k - 1])
        b_key = a_key.split('value="')[1].split('"/')[0]
        e_code.append(b_key)
        k += 1
    for i in e_code:
        if i == 'F734DE351C165C39':
            new_code = '对'
            key.append(new_code)
        else:
            new_code = 'X'
            key.append(new_code)
    return key


def xian_shi_da_an(key):
    n = 1
    print('')
    for s in key:
        print('第%d题的答案是%s' % (n, s))
        n += 1
    return None


if __name__ == "__main__":
    choose = input('你渴望的是选择题答案还是判断题答案呢? 请输入 A选择  B判断>>').upper()
    if choose == 'A':
        da_an = code_change_dan_xuan()
    elif choose == 'B':
        da_an = code_change_pd()
    else:
        print('想啥呢没有C选项了')
        exit()
    xian_shi_da_an(da_an)

执行结果

原本得花不少时间才能通过的考试,现在可以直接对着答案抄了,简直不要太棒了!

Last modification:December 8th, 2020 at 11:03 pm