> 文章列表 > python带你制作可以随机的自答题程序

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

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

前言

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

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

目录

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

环境使用:

  • 解释器版本 >>> 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 模块名

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

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

可找我获取的:

  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. 保存数据, 保存数据 <保存表格里面即可>

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

二. 进行自动答题操作

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

  1. 打开浏览器

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

循环操作:

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

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

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

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

代码展示

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_listdef 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).textreturn html_datadef GetContent(AnswerID):AnswerUrl = f'https://***/Post/{AnswerID}.htm'源码、教程、解答+VX:qian97378html_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 AnswerDictdef 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]# 多选题, 答案肯定大于1if 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:qian97378driver.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()

尾语 💝

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

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

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

—— 心灵鸡汤

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

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

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