python带你制作自动答题程序,速度超越98%人

news2024/11/17 23:59:41

前言

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

目录

      • 前言
      • 环境使用:
      • 模块使用:
      • 自动答题思路步骤:
      • 代码展示
        • 尾语 💝

环境使用:

  • Python 3.8

    –> 解释器 <执行python代码>

  • Pycharm

    –> 编辑器 <写python代码的>

模块使用:

import requests —> 数据请求模块 pip install requests

import re

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

默认安装 selenium 安装 4.0 和 3.0 语法上面有区别, 但是方法一样

本文所有模块\环境\源码\教程皆可点击文章下方名片获取此处跳转

自动答题思路步骤:

一. 获取题目答案 <完成>

答案页面 --> 是有答案内容的

找到所有答案页面ID, 就可以获取所有题目答案内容了 --> 分析答案页面ID在哪里可以获取

  • 通过开发者工具进行抓包分析

    1. 打开开发者工具: F12 或者 鼠标右键点击检查选择network
    2. 刷新网页: 让文本网页的数据内容重新加载一遍
    3. 关键字搜索: 通过搜索 答案ID, 去查询对应数据包
  • 通过代码, 然后获取答案内容:

    代码基本四大步骤: 发送请求 --> 获取数据 --> 解析数据 --> 保存数据

    1. 发送请求, 模拟浏览器对于url地址发送请求

      请求地址: 答案页面url

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

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

      答案选项

二. 把题目答案和选项进行比较, 自动选择正确答案

模拟人的行为去答题:

  1. 打开浏览器

  2. 输入答题网址

因为有1700多题目, 重复操作

  1. 选择正确选项

  2. 点击下一题

代码展示

# 导入数据请求模块 --> 第三方模块, 需要安装 pip install requests
import requests
# 导入正则模块 --> 内置模块, 不需要安装
import re
# 导入自动化模块 --> 第三方模块, 需要安装 pip install selenium==3.141.0 <指定版本安装>
from selenium import webdriver

"""
1. 打开浏览器
    配置浏览器驱动:
        大版本一样, 小版本最相近即可
"""
driver = webdriver.Chrome(r'D:\download\anaconda\chromedriver.exe')
# 2. 访问网站
driver.get('https://www.jsyks.com/kms-sxlx')
# 设置全屏
driver.maximize_window()
# 读取答案文本内容, 获取答案ID <读取数据>
f = open('答案ID.txt', encoding='utf-8')
# 字符串分割方法: split() --> 字符串数据变成列表
answer_id_list = f.read().split(',')
# for循环遍历, 把列表里面元素一个一个提取出来
for answer_id in answer_id_list:
    """
    1. 发送请求, 模拟浏览器对于url地址发送请求
        请求地址: 答案页面url
        - 安装模块:
            I. 点击pycharm终端 输入命令 pip install requests
            II. win + R 输入cmd 输入命令 pip install requests
        - 模拟浏览器发送请求
            好处: 防止被反爬
            headers 请求头 --> 可以复制
        - <Response [200]> 表示响应对象
            Response: 中文意思响应/回复/回答
            <>: 表示对象
            200: 状态码 表示请求成功 --> 相当于你打电话, 打通了有嘟嘟嘟声音
            404: 链接不对 --> 相当于你打电话, 你所拨打的电话是空号

    打乱了 --> 题目 + 答案内容 都保存下来, 然后进行对比
    """
    # 构建答案页面url --> f'{}' 字符串格式化方法 --> format
    answer_url = f'https://tiba.jsyks.com/Post/{answer_id}.htm'
    # 伪装模拟
    headers = {
        # User-Agent 表示浏览器基本身份标识
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
    }
    # 发送请求
    response = requests.get(url=answer_url, headers=headers)
    """
    2. 获取数据, 获取页面网页源代码
    3. 解析数据, 提取我们想要答案内容
        正则表达式: 会 1 不会 0
        re.findall('匹配的数据', '什么地方匹配') --> re模块里面findall方法: 找到所有我们想要的数据内容

        (.*?) --> ()精确匹配 .匹配任意字符(除了\n换行符) *匹配前一个字符0或者N个 ? 非贪婪匹配模式

    网站不同, 数据结构不同 --> 基本上一个代码对一个网站
    """
    answer = re.findall('答案是:(.*?)。', response.text)[0]
    print(answer)
    if answer == '对':
        answer = 'Y'
    elif answer == '错':
        answer = 'N'
    """
    选择正确答案进行点击操作:
        先定位元素, 然后再进行操作
    find_element_by_css_selector --> 通过css选择器查找元素

    len() 统计元素个数
        answer --> A 元素只有一个  <单选题>
        answer --> ABD 元素三个  <多选题>
    """
    if len(answer) == 1:
        driver.find_element_by_css_selector(f'#btn{answer}').click()
        # 点击下一题
        driver.find_element_by_css_selector('#btn_PN span').click()
    elif len(answer) > 1:
        # len(answer) --> 3 num -> 0 / 1 / 2
        for num in range(len(answer)):
            driver.find_element_by_css_selector(f'#btn{answer[num]}').click()
        # 点击确定选好了的按钮
        driver.find_element_by_css_selector('#ExamOptDa input').click()
        # 点击下一题
        driver.find_element_by_css_selector('#btn_PN span').click()

尾语 💝

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

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

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

—— 心灵鸡汤

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

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

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

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

相关文章

Springboot_vue摄影作品图片展示交流平台

前后端通讯一般都是采取标准的JSON格式来交互。 前后端分离 的核心思想是前端页面通过 ajax 调用后端的 restuful api 进行数据交互&#xff0c;而 单页面应用&#xff08;single page web application&#xff0c;SPA&#xff09;&#xff0c;就是只有一张页面&#xff0c;并在…

https解决方案-利用keytool生成证书

https解决方案 1:什么是HTTPS&#xff1f; HTTPS其实是有两部分组成&#xff1a;HTTP SSL / TLS&#xff0c; 也就是在HTTP上又加了一层处理加密信息的模块&#xff0c;并且会进行身份的验证。 2:什么是自签名证书&#xff1f; 就是自己生成的证书&#xff0c;并不是官方…

计算机中的大小端存储

在讲C语言的时候&#xff0c;有讲到大小端的内容&#xff0c;这里呢对大小端的相关内容进行了整理&#xff0c;有需要的可以参考一下&#xff01; 大端和小端来自一个小故事&#xff1a;端模式(Endian)的这个词出自Jonathan Swift书写的《格列佛游记》。这本书根据将鸡蛋敲开的…

mysql导致索引失效的常见情况以及命名规范索引计划分析

1、失效的情况 1.前导模糊查询不能利用索引(like ‘%XX’或者like ‘%XX%’) 假如有这样一列code的值为’AAA’,‘AAB’,‘BAA’,‘BAB’ ,如果where code like %AB’条件&#xff0c;由于前面是 模糊的&#xff0c;所以不能利用索引的顺序&#xff0c;必须一个个去找&#xf…

虚拟机的Linux安装redis

1&#xff0c;下载redis 可以去官网下载压缩包 2&#xff0c;环境准备 我看很多文章都说要安装yum&#xff0c;但是在终端界面一直都是安装失败&#xff0c;后面才知道我的虚拟机是Ubuntu版本&#xff0c;而Ubuntu版本一般不使用yum命令&#xff0c;一般都是使用apt-get命令…

RANSAC: Random Sample Consensus

目录RANSAC算法基本思想和流程迭代次数推导参考RANSAC RANSAC(RAndom SAmple Consensus,随机采样一致)算法是从一组含有外点(outliers)的数据中正确估计数学模型参数的迭代算法。“外点”一般指的的数据中的噪声&#xff0c;比如说匹配中的误匹配和估计曲线中的离群点。所以&a…

电脑黑屏却开着机是怎么回事?解决黑屏的快捷方法

我们经常会用到电脑&#xff0c;但是你真的了解电脑相关知识吗&#xff1f;遇到比较复杂的电脑问题&#xff0c;你是否会手足无措&#xff1f;电脑黑屏却开着机这是什么原因造成的&#xff0c;我们有什么好办法恢复黑屏的电脑吗&#xff1f; 本文针对电脑黑屏却开着机的情况&a…

PCB生产工艺 | 第三道之沉铜,你都了解吗?

衔接上文&#xff0c;继续为朋友们分享普通单双面板的生产工艺流程。 如图&#xff0c;第三道主流程为沉铜。 沉铜的目的为&#xff1a; 在整个印制板&#xff08;尤其是孔壁&#xff09;上沉积一层薄铜&#xff0c;以便随后进行孔内电镀&#xff0c;使孔金属化&#xff08;孔…

小众点评项目要点内容总结【面试用】

小众点评项目要点 文章目录小众点评项目要点1.使用Redis代替Session登录1.1 Session登录存在的问题1.2 使用Redis代替Session登录分析1.3 使用Redis登录的流程1.4 解决Redis中有效期问题2.使用Redis作为缓存2.1 为什么使用缓存2.2 缓存策略2.3 解决缓存穿透2.4 解决缓存雪崩2.5…

CSS响应式设计——(视口/网格视图/媒体查询/图像/视频)看这一篇就够了

目录 响应式网页设计 - 简介 什么是响应式网页设计&#xff1f; 为所有用户获得最佳体验的设计 响应式网页设计 - 视口 什么是视口&#xff1f; 设置视口 把内容调整到视口的大小 响应式网页设计 - 网格视图 什么是网格视图&#xff1f; 构建响应式网格视图 实例 C…

【冷知识】如何快速获取自己的微信公众号关注页的链接地址?

一&#xff1a;业务场景 目前微信公众号的关注方法基本有三种: 扫描公众号二维码搜索公众号账号名称通过阅读公众号发布出来的公众图文,点击上面的微信号名称(右上角三点),可以查看公众号,进入关注页面。 但是如果想实现通过一个链接直接跳转到公众号的关注页面&#xff0c;…

VRP系统(视图介绍以及基本命令)

前言 VRP (Versatile Routing Platform)即通用路由平台&#xff0c;是华为在通信领域多年的研究经验结晶&#xff0c;是华为所有基于IP/ATM构架的数据通信产品操作系统平台。运行VRP操作系统的华为产品包括路由器、局域网交换机、ATM交换机、拨号访问服务器、IP电话网关、电信级…

【Hadoop】Hadoop 3.x 新特性总览

Hadoop 3.x 新特性剖析系列11. 概述2. 内容2.1 JDK2.2 EC技术2.3 YARN的时间线V.2服务2.3.1 伸缩性2.3.2 可用性2.3.3 架构体系2.4 优化Hadoop Shell脚本2.5 重构Hadoop Client Jar包2.6 支持等待容器和分布式调度2.7 支持多个NameNode节点2.8 默认的服务端口被修改2.9 支持文件…

数据量过大,使用saveBatch保存数据太慢如何解决:

数据量过大&#xff0c;使用saveBatch保存数据太慢如何解决&#xff1a; 在使用mybatis-plus的saveBatch方法时发现保存太慢&#xff0c;会生成一大堆的insert&#xff0c;而不是一批一批的&#xff0c;影响因素可能有两个&#xff0c;如下&#xff1a; 1. mybatis-plus使用s…

一文读懂SCADA系统的组件功能及应用

什么是SCADASCADA是一个功能强大的控制系统&#xff0c;旨在收集&#xff0c;分析和可视化来自工业设备的数据。SCADA系统自动提取、监控、处理、分发、记录和显示从远程现场设备(如传感器、工厂机器、电机、泵、阀门)和工业企业、制造设施、核电站和炼油厂等资产密集型环境中的…

kkFileView 文件在线预览部署

一、什么是kkFileView kkFileView为文件文档在线预览解决方案&#xff0c;该项目使用流行的spring boot搭建&#xff0c;易上手和部署&#xff0c;基本支持主流办公文档的在线预览&#xff0c;如doc,docx,xls,xlsx,ppt,pptx,pdf,txt,zip,rar,图片,视频,音频等等。 官方地址kkFi…

MasterSlave概念与配置与eeprom信息擦除解决步骤

目录 一、Master&Slave概念与配置​ 1.Master&Slave概念​ 2.期待协商结果​ 3.RENIX配置​ 4.帮助文档​ 二、eeprom信息擦除解决步骤​ 1.使用SSH管理软件连接​​网络测试仪​​ 2.使用“cd /opt/eeprom”命令进入eeprom文件夹 3.进入eeprom文件夹 4.重启…

GPU云服务器CentOS环境下的配置教程

CnetOS环境部署 CentOS是支持自动安装的cuda以及相关驱动的&#xff0c;我们就直接安装吧 测试环境 登录后首先检查系统是否有支持 CUDA 编程的 GPU&#xff0c;使用如下命令查看当前GPU的型号。可以识别出NVIDIA T4 lspci | grep -i nvidia输入nvidia-smi&#xff0c;这里…

KernelShark分析内核任务执行过程

一、KernelShark简介 KernelShark是一个非常实用的工具&#xff0c;其可以搭配 trace-cmd 使用&#xff0c;将内核的任务执行过程以直观的形式展现出来。下面的文档中详细的介绍了KernelShark的使用方法和功能&#xff0c;这里不再详细描述 https://www.kernelshark.org/Docum…

C语言--模拟实现库函数strcpy

目录前言strcpy实现的基本原理函数的模拟实现代码优化assert--断言const关键字strcpy的返回值结语前言 本章内容我们将通过相关函数来实现库函数中的strcpy。 strcpy实现的基本原理 C语言 strcpy()函数用于对字符串进行复制&#xff08;拷贝&#xff09;。需要的头文件为 &l…