python带你制作可以随机的自答题程序

news2024/11/28 16:43:45

前言

嗨喽~大家好呀,这里是魔王呐 ❤ ~!

目录

      • 前言
      • 环境使用:
      • 模块使用:
      • 程序实现思路: <模板> 获取题库
        • 一. 获取题库 --> 问题+答案
        • 二. 进行自动答题操作
      • 代码展示
        • 题库采集
        • 自动答题
      • 尾语 💝

环境使用:

  • 解释器版本 >>> python 3.8

  • 代码编辑器 >>> pycharm 2021.2

模块使用:

  • import requests

    —> 数据请求 / 第三方模块 / 需要安装

  • import re

    —> 正则表达式来匹配处理字符串 / 内置模块 / 无需安装

  • from selenium import webdriver

    —> 自动测试模块 pip install selenium==3.141.0 <指定版本安装>

第三方模块安装:

win + R 输入cmd 输入安装命令 pip install 模块名

(如果你觉得安装速度比较慢, 你可以切换国内镜像源)

可找我获取的:

  1. 驱动安装教程

  2. 素材: 答案ID文本获取

程序实现思路: <模板> 获取题库

一. 获取题库 --> 问题+答案

一. 数据来源分析 --> 通过浏览器 开发者工具 抓包分析

  1. 明确需求:

    • 明确采集的网站是什么

      题目答案页面: https:///Post/2c15b.htm

    • 明确采集的数据是什么

      1. 问题

      2. 答案

  2. 分析这两个数据怎么获取

    已知: 问题/答案 数据来自于 --> 答案页面 第一题: https:///Post/2c15b.htm

    问题: 获取1701道题目 --> 分析每个题目答案页面URL构成

    第一题: https:///Post/2c15b.htm

    第二题: https:///Post/8ac1a.htm

    第三题: https:///Post/e97d7.htm

    2c15b / 8ac1a / e97d7

    所以 只需要获取所有答案页面ID, 即可获取所有题库

二. 代码实现步骤

  1. 发送请求, 模拟浏览器对 答案页面url地址 发送请求

  2. 获取数据, 获取网页源代码

  3. 解析数据, 提取我们想要的数据内容

  4. 保存数据, 保存数据 <保存表格里面即可>

二. 进行自动答题操作

模拟人的行为, 进行答题操作

  1. 打开浏览器

  2. 访问网址 <答题网址>

循环操作:

  1. 浏览题目, 选择正确答案, 点击下一题

    和题库的内容进行对比, 获取答案, 选择选项

  2. 继续答题, 继续点下一题

代码展示

python资料、源码、教程: 点击此处跳转文末名片获取

题库采集

导入模块

import requests
import re
import csv
import concurrent.futures
import parsel
def AnswerID():
    f = open('答案ID.txt', encoding='utf-8')
    answer_id_list = [answer_id for answer_id in f.read().split(',')]
    return answer_id_list


def GetResponse(html_url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
    }
    html_data = requests.get(url=html_url, headers=headers).text
    return html_data


def GetContent(AnswerID):
    AnswerUrl = f'https://***/Post/{AnswerID}.htm'
    源码、教程、解答+VX:qian97378
    html_data = GetResponse(html_url=AnswerUrl)
    selector = parsel.Selector(html_data)
    problem = selector.css('#question a::text').get()
    answer = selector.css('#question h1 b::text').getall()
    if len(answer) == 0:
        answer = selector.css('#question h1 u::text').get()

    AnswerDict = {
        'Problem': problem,
        'Answer': answer,
    }
    return AnswerDict


def main(page):
    AnswerDict = GetContent(AnswerID=page)
    csv_writer.writerow(AnswerDict)
    print(AnswerDict)


if __name__ == '__main__':
    # GetContent(AnswerID='8502e')
    answer_id_list = AnswerID()
    f = open('科目四题库.csv', mode='a', encoding='utf-8', newline='')
    csv_writer = csv.DictWriter(f, fieldnames=['Problem', 'Answer'])
    csv_writer.writeheader()
    exe = concurrent.futures.ThreadPoolExecutor(max_workers=7)
    for answer_id in answer_id_list:
        exe.submit(main, answer_id)
    exe.shutdown()

自动答题

导入模块

from selenium import webdriver
import pandas as pd
import re
df = pd.read_csv('题库.csv')
key = []
value = []

获取每一道题目

for i in df['Problem']:  # 问题作为键

把题目添加到列表里面

    key.append(i)

获取每一道题目答案

for j in df['Answer']: # 问题作为值

把答案添加到列表里面

    value.append(j)

把两个列表合并成字典

dic = dict(zip(key, value))

打开浏览器

Chrome 浏览器 谷歌

driver = webdriver.Chrome()

访问网站

driver.get('https://www.jsyks.com/kms-fzks')
driver.maximize_window()

答题操作:

题库 <获取出来了>

读取csv文件, 把题目内容以及答案读取出来

print(dic)
for page in range(50):
    Questions = driver.find_element_by_css_selector('#ExamTit').text
    # \d+ 匹配数字 获取题目
    Question = re.findall('\d+. (.*)', Questions)[0]
    answer = dic[Question]
    # 多选题, 答案肯定大于1
    if len(answer) == 1:
        # 判断答案内容 选择选项
        if answer == '对':
            # 定位对元素, 进行点击操作
            driver.find_element_by_css_selector('#TX1 #btnDa11').click()
        elif answer == '错':
            driver.find_element_by_css_selector('#TX1 #btnDa12').click()
        elif answer == 'A':
            driver.find_element_by_css_selector('#TX2 #btnDa21').click()
        elif answer == 'B':
            driver.find_element_by_css_selector('#TX2 #btnDa22').click()
        elif answer == 'C':
            driver.find_element_by_css_selector('#TX2 #btnDa23').click()
        elif answer == 'D':
        源码、教程、解答+VX:qian97378
            driver.find_element_by_css_selector('#TX2 #btnDa24').click()

        # 点击下一题
        driver.find_element_by_css_selector('#actArea #btnNext2').click()
    elif len(answer) > 1:
        # 多选
        for x in answer:
            if x == 'A':
                driver.find_element_by_css_selector('#TX2 #btnDa21').click()
            elif x == 'B':
                driver.find_element_by_css_selector('#TX2 #btnDa22').click()
            elif x == 'C':
                driver.find_element_by_css_selector('#TX2 #btnDa23').click()
            elif x == 'D':
                driver.find_element_by_css_selector('#TX2 #btnDa24').click()

        driver.find_element_by_css_selector('#actArea #btnNext2').click()


driver.find_element_by_css_selector('#actArea #btnNext3').click()
driver.find_element_by_css_selector('#Tip_Msg span input:nth-child(1)').click()

尾语 💝

要成功,先发疯,下定决心往前冲!

学习是需要长期坚持的,一步一个脚印地走向未来!

未来的你一定会感谢今天学习的你。

—— 心灵鸡汤

本文章到这里就结束啦~感兴趣的小伙伴可以复制代码去试试哦 😝

👇问题解答 · 源码获取 · 技术交流 · 抱团学习请联系👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/423195.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数学基础|线性代数回顾

因为学机器学习的时候发现自己线性代数忘光光了&#xff08;悲&#x1f613;&#xff0c;本篇捞一捞当年学线性代数看哔哩哔哩宋浩老师补充记的潦草笔记。 目录 &#x1f4da;线性代数知识点 &#x1f407;向量 &#x1f955;向量的线性组合 &#x1f955;线性相关无关的性…

JVM 工作原理和即时编译(JIT)

目录 1、什么是虚拟机&#xff1f; 2、JVM 虚拟机简介 3、JVM 的工作原理 4、什么是即时编译&#xff08;JIT&#xff09;&#xff1f; 5、解释型语言和编译型语言的区别 6、为什么说 Java 是一种半编译半解释的语言&#xff1f; 1、什么是虚拟机&#xff1f; 虚拟机是一…

直播美颜技术的演进及其应用:直播美颜SDK详解

直播美颜技术的应用&#xff0c;为直播开辟了新的业态&#xff0c;从最初简单的美颜滤镜&#xff0c;到现在的直播美颜SDK&#xff0c;其技术演进历程也是一步步走来。 一、直播美颜技术的演进 1、简单美颜滤镜 最初的直播美颜技术&#xff0c;就是通过简单的美颜滤镜来实现…

python内存回收gc模块

目录1. python 垃圾回收机制标记-清除的回收机制分代回收2. gc 模块参考资料对已经销毁的对象&#xff0c;Python不会自动释放其占据的内存空间。为了能够充分地利用分配的内存&#xff0c;避免程序跑到一半停止&#xff0c;要时不时地进行内存回收&#xff0c;这时候gc&#x…

超详细——Python中 pip 常用命令

人生苦短&#xff0c;我学Python 相信对于大多数熟悉Python的人来说&#xff0c;一定都听说并且使用过pip这个工具&#xff0c;但是对它的了解可能还不一定是非常的透彻&#xff0c;今天小编就来为大家介绍10个使用pip的小技巧&#xff0c;相信对大家以后管理和使用Python当中…

每天一道大厂SQL题【Day19】华泰证券真题实战(一)

每天一道大厂SQL题【Day19】华泰证券真题实战(一) 大家好&#xff0c;我是Maynor。相信大家和我一样&#xff0c;都有一个大厂梦&#xff0c;作为一名资深大数据选手&#xff0c;深知SQL重要性&#xff0c;接下来我准备用100天时间&#xff0c;基于大数据岗面试中的经典SQL题&…

CSS中相对定位与绝对定位的区别及作用

CSS中相对定位与绝对定位的区别及作用场景复现核心干货相对定位绝对定位子绝父相&#x1f525;&#x1f525;定位总结绝对定位与相对定位的区别场景复现 在学习前端开发的过程中&#xff0c;熟练掌握页面布局和定位是非常重要的&#xff0c;因此近期计划出一个专栏&#xff0c…

【问题、AI解答】mongodb中使用$lookup进行连表查询使用_id作为localField出现查询结果字段为空的情况

描述&#xff1a; db.acticles.aggregate([ {$lookup&#xff1a;{from:"acticlesMaptags",localField:"_id",foreignField:"acticleid",as:"tagid"} } ])acticlesMaptags集合中的acticleid字段存在与acticles集合中的_id相匹配的数据…

1.15 从0开始学习Unity游戏开发--游戏UI

上一章中&#xff0c;我们剩下最后一个任务&#xff0c;需要支持鼠标控制准心来进行设计&#xff0c;那么准心本质上就是一个始终呈现在屏幕上的一个图片&#xff0c;你当然可以用一个3D物体来制作&#xff0c;之前讲解渲染概念的时候也提到过&#xff0c;我们的屏幕就是相机的…

传智健康_day3

本章对检查组管理进行开发 一.新增检查组 1.修改新增弹层可见属性&#xff0c;添加重置表单功能 2.动态刷新检查组包含的检查项信息 <tr v-for"c in tableData"> 使用for循环来遍历查询出tableData中的数据 tableData是一个数组对象&#xff0c;定义在VUE…

hadoop分布式安装

文章目录1. 将安装包hadoop-3.1.3.tar.gz上次至linux中2. 进行解压操作3. 修改目录名称4. 配置环境变量5. 远程传输5.1 scp远程传输6. 免密登录7. 集群规划8. 修改自定义配置文件8.1 hadoop-env.sh8.2 core-site.xml8.3 hdfs-site.xml8.4 mapred-site.xml8.5 yarn-site.xml8.6 …

ReactNative入门

React基本用法&#xff1a; react与js不同的点在于 react使用的是虚拟DOM js是真实DOM 作用&#xff1a;当有新的数据填充 可以复用之前的&#xff0c;而js需要整体重新渲染 创建虚拟DOM还可以使用jsx语法直接声明&#xff1a; 注意要用babel标签将jsx转化为js 但是建议采用j…

UNIX环境高级编程——进程环境

7.1 引言 本章主要讲解了进程的环境。 7.2 main函数 C程序总是从main函数开始执行&#xff0c;其函数原型为&#xff1a; int main(int argc, char *argv[]);argc是命令行参数的数目&#xff0c;argv是指向参数的各个指针所构成的数组&#xff1b;当内核执行C程序时&#x…

SpringBoot集成Kafka详解

一、使用idea创建SpringBoot项目 1.1 使用Spring Initializr创建一个SpringBoot程序 点击Next。 1.2 添加依赖 依赖说明&#xff1a; Lombok简化实体类开发。 Spring Web让项目集成web开发所有依赖&#xff0c;包括Spring MVC&#xff0c;内置tomcat等。 Spring for Apache…

HNU-操作系统OS-2023期中考试复习-刷题

往年期中卷极难获得&#xff0c;这里找了几套卷子。可以看看。 因为往年都是从第一周开始上课的&#xff0c;所以进度会快一点&#xff0c;这学期是从第四周开始上课的&#xff0c;所以进程会慢些&#xff0c;讲到第九章所以只考到第九章。 同样因为太忙了&#xff0c;答案找…

图像分类卷积神经网络模型综述

图像分类卷积神经网络模型综述遇到问题 图像分类&#xff1a;核心任务是从给定的分类集合中给图像分配一个标签任务。 输入&#xff1a;图片 输出&#xff1a;类别。 数据集MNIST数据集 MNIST数据集是用来识别手写数字&#xff0c;由0~9共10类别组成。 从MNIST数据集的SD-1和…

ctfshow web入门web119-124

1.web119 和118题类似&#xff0c;只不过是过滤了PATH 0可以用任何字符代替&#xff0c;比如A,{A},A,{0} KaTeX parse error: Expected }, got # at position 2: {#̲SHLVL}1&#xff0c;或者{##},${#?} {PHP_VERSION:~A}2,php版本为x.x.2时 ${#IFS}3(linux下是3&#xff0c;…

IntelliJ IDEA 2023.1正式发布,Maven项目大提速支持Apache Dubbo

你好&#xff0c;我是YourBatman&#xff1a;做爱做之事❣交配交之人。 &#x1f4da;前言 一年一个大版本&#xff0c;共计3个中型版本&#xff0c;北京时间2023年3月月29日终于迎来了IntelliJ IDEA今年的首个版本2023.1。老规矩&#xff0c;吃肉之前&#xff0c;可以先把这…

顺丰科技x腾讯安全iOA联合案例获云安全联盟CSA 2022安全革新奖

近年来&#xff0c;随着云计算、大数据、物联网等技术的加速创新和应用&#xff0c;一场数字化的变革开始席卷各行各业。远程办公、业务协同、分支互联等需求涌现&#xff0c;随之而来的还有更加复杂多元的高级网络攻击。在此背景下&#xff0c;传统的基于边界的网络安全防护理…

矩阵键盘+CH559制作国产USB矩阵键盘

矩阵键盘+CH559制作国产USB矩阵键盘 文章目录 矩阵键盘+CH559制作国产USB矩阵键盘为什么选择CH559作为主控芯片?如何实现该款矩阵USB键盘?如何将矩阵键盘的信号转化为USB键盘信号?原材料: 矩阵键盘(附带行列键码定义)CH559开发板将矩阵键盘的所有排线连接到单片机的GPIO引…