基于DrissionPage模块,用Python实现自动答题

让代码模拟人工,自动检索答案并选择正确的选项,还是挺有趣的

前言

语言:Python

编辑器:PyCharm

模块:DrissionPage

DrissionPage是一款集成了Selenium和Requests的优点,能够同时实现“写得快”和“跑得快”。能够在不同须要时切换相应模式,并提供一种人性化的使用方法,提高开发和运行效率。同时这个模块还以网页为单位封装了常用功能,提供非常简便的操作和语句,十分的好用。

了解具体用法可以查看DrissionPage这里就不赘述了。

示例分析

下面我们就以驾考的一个网站,来介绍一下实现自动答题的思路要怎么实现?

1、打开示例页面

首先我们先打开示例网址:科目一模拟考试_c1科目一模拟考试2023最新版_驾驶员模拟考试

2、分析页面特点

我们进行数据采集和处理之前,首先要分析一下页面的特点以及页面的结构,这里我们可以用F12查看页面元素(查看本题分析,得到分析页网址:https://tiba.jsyks.com/Post/d1493.htm)

 打开分析页面网址,我们可以看到题目的答案和解析(这里只用到答案)

3、查找规律特点

我们可以通过F12查看多个页面来确认和验证,题目的结构已经答案的规律,找到相似性(找到规律才能进行代码实现)

通过分析我们可以发现这样几个规律:

①:模拟考试中每个题目都在一个li标签下面

②:每个li标签的c属性都对应这个题目的解析地址的参数 

https: //tiba.jsyks.com/Post/c4849.htm 这里的和上面的li标签的c属性一致

 ③:答案都是在一个Id为question的div标签的u标签内

 ④:题目解析中选择题的顺序和问题中的顺序一致(这点决定了代码是好写还是非常好写)

1)顺序一致时,只需要根据答案的做相似度匹配即可,也就是,解析中选A,模拟测试时也选A就行了

2)顺序随机时,就需要将解析中的ABCD,匹配出对应的答案文本,然后在用文本去匹配不同的选项,然后得到正确的答案即可。

下面就选择其中一个题目,来分析一下:

题目中可以得到解析地址的参数为:f9016,

 通过查看解析页面,可以看到选项的顺序一致,另外在u标签中可以看到答案的选项

实现逻辑

通过上面的分析,我们基本掌握了页面的特点和规律,下面我们就完整梳理一下实现的思路

1、获取页面数据、得到全部题目的集合

2、遍历每个li标签

3、根据li标签中获取的解析地址,获取解析的答案

4、根据解析得到的答案,选择对应的选项

5、遍历完全部题目后,提交试卷得到结果

代码实现

①:导入相关模块的库

from DrissionPage import ChromiumPage,SessionPage,WebPage
from time import sleep

②:定义获取解析页面的方法

def  getAnswer(code):
    pg=SessionPage()
    pg.get(f'https://tiba.jsyks.com/post/{code}.htm')
    answ=pg.ele('#question').ele('t:u').text
    return answ

如果是判断题,会返回:对/错

如果是选择题,会返回:题目选项的编号,例如:A/B/C/D

③:编写页面操作的实现代码

page=ChromiumPage()
    # 访问目标页面
    page.get('https://www.jsyks.com/kmy-mnks')
    page.wait.load_start()  # 保证元素都加载出来

    div_content = page.ele('t:div@@class=mBoxL')

    ul_element = div_content.ele('t:ul@@class=Content')
    li_list = ul_element.eles('t:li')

    for item in li_list:
        # sleep(1)
        ans=getAnswer(item.attr("c"))
        print(f"当前的题目为:{item.ele('t:strong').text} \n答案为:{ans}")
        if ans == '对':
            print(item.ele('text:正确').html)
            item.ele('text:正确').click()
        elif ans == '错':
            print(item.ele('text:错误').html)
            item.ele('text:错误').click()
        else:
            item.ele(f'text:{ans}、').click()

需要对获取到的答案做简单的处理,(试题中,都是判断和单选):

如果是对,就转换选项的正确;

如果是错,就对应选项的错误;

如果是选项,就对应选项的序号。

完整的代码如下

from DrissionPage import ChromiumPage,SessionPage,WebPage
from time import sleep

def  getAnswer(code):
    pg=SessionPage()
    pg.get(f'https://tiba.jsyks.com/post/{code}.htm')
    answ=pg.ele('#question').ele('t:u').text
    return answ

if __name__ == '__main__':
    page=ChromiumPage()
    # 访问目标页面
    page.get('https://www.jsyks.com/kmy-mnks')
    page.wait.load_start()  # 保证元素都加载出来
    div_content = page.ele('t:div@@class=mBoxL')
    ul_element = div_content.ele('t:ul@@class=Content')
    li_list = ul_element.eles('t:li')
    for item in li_list:
        # sleep(1)
        ans=getAnswer(item.attr("c"))
        print(f"当前的题目为:{item.ele('t:strong').text} \n答案为:{ans}")
        if ans == '对':
            print(item.ele('text:正确').html)
            item.ele('text:正确').click()
        elif ans == '错':
            print(item.ele('text:错误').html)
            item.ele('text:错误').click()
        else:
            item.ele(f'text:{ans}、').click()

    print('全部回答完毕')
    div_content.ele('t:u@@class=btnJJ').click()

效果演示

Python自动答题示例

写在最后

1、对于单选题,如果解析和试题的选项顺序一致,只需要按照序号去映射就行

2、对于单选题,如果解析中和试题中的顺序是随机的,就需要在解析中得到序号后,匹配到对应的选项的文本(例如:解析答案为D,就需要根据答案D去解析得到A图这个文本),然后用解析到的文本,去匹配选项,得到最终的正确选项。

 2、如果出现多选题目或者其他情况,则需要根据具体的情况,做针对性的优化调整即可

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Python是一种高级编程语言,拥有开源免费的环境和庞大的第三方库支持。在繁琐的答题工作中,利用Python实现百万答题自动百度搜索答案,可以大大提高效率和准确性。 Python实现百万答题自动百度搜索答案的过程可以分解成以下几个步骤: 第一步,获取题目和答案。这需要从一个源获取题目和答案的问答对,比如已有的题库或者从网上抓取。获取后,需要对问答对进行特征提取和分类存储,方便后续查询时使用。 第二步,使用Python实现百度搜索。可以使用Python内置的urllib库模拟浏览器访问百度搜索引擎,在搜索框中输入问题文本,然后获取并解析搜索结果的信息,包括相关答案和搜索结果的URL列表。需要注意的是,这种方式并不违反百度的搜索协议,因为查询和搜索的次数都是有限制的,且不会对搜索引擎的性能产生负面影响。 第三步,使用Python自然语言处理技术过滤答案。搜索结果的URL列表中可能包含了很多垃圾信息,例如广告、论坛讨论等等,需要使用Python自然语言处理技术对网页内容进行过滤和解析,只保留与答案相关的信息。例如,可以使用词频统计、TF-IDF等技术对搜索结果进行排序和过滤。 第四步,使用Python自动化工具模拟答题过程。使用Python模拟人的操作,可以实现自动化答题,即根据程序的搜索结果,自动点击正确答案并提交。需要注意的是,为了防止被封号,程序需要加入随机休眠和代理池等机制,以模拟人的操作。 通过以上步骤,就可以使用Python实现百万答题自动百度搜索答案。当然,需要提醒大家的是,使用这种方式来解决答题问题,并不是最好的方法,正确的学习和思考才是成功的关键。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coding行者

你的鼓励,将是我持续分享的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值