利用Python开发一个自动答题程序
作者:魔王不会哭 发布时间:2022-12-31 10:33:16
标签:Python,自动,答题
环境使用
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
刷新网页: 让文本网页的数据内容重新加载一遍
关键字搜索: 通过搜索 答案ID, 去查询对应数据包
2.通过代码, 然后获取答案内容:
代码基本四大步骤: 发送请求 --> 获取数据 --> 解析数据 --> 保存数据
a.发送请求, 模拟浏览器对于url地址发送请求
请求地址: 答案页面url
b.获取数据, 获取页面网页源代码
c.解析数据, 提取我们想要的数据内容
答案选项
二. 把题目答案和选项进行比较, 自动选择正确答案
模拟人的行为去答题:
打开浏览器
输入答题网址
因为有1700多题目, 重复操作
选择正确选项
点击下一题
代码展示
# 导入数据请求模块 --> 第三方模块, 需要安装 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()
来源:https://blog.csdn.net/python56123/article/details/128856384


猜你喜欢
- 前言你的心要如溪水般柔软,你的眼波要像春天般明媚。 ——余光中似乎很少看见湍急的溪流,多数
- 如下所示:#!/usr/bin/env python#_*_ coding:utf-8 _*_name = ['hello'
- 一. 什么是装饰器知乎某大佬如是说:内裤可以用来遮羞,但是到了冬天它没法为我们防风御寒,聪明的人们发明了长裤,有了长裤后宝宝再也不冷了,装饰
- 当你提交一个查询的时候,MySQL会分析它,看是否可以做一些优化使处理该查询的速度更快。这一部分将介绍查询优化器是如何工作的。如果你想知道M
- 概述Python中的增强赋值是从C语言中借鉴出来的,所以这些格式的用法大多和C一致,本身就是对表达式的简写,即二元表达式和赋值语句的结合,比
- 前言因为项目中遇到了这个bug:Vue cil2中配置代理proxytable成功,却无效报错404,在后端和代理都配置无误的情况下,还是报
- 画布可以做很多事情,比如可以绘图,也可以做海报。在这里只是想拿它来的实现亲笔签名,开启不一样的亲笔签名姿势。开发框架:uniapp开发语言:
- reader.html<html><head><meta http-equiv=&quo
- 下面是十个Python中很有用的贴士和技巧。其中一些是初学这门语言常常会犯的错误。注意:假设我们都用的是Python 31. 列表推导式你有
- 一个完整的程序离不开日志,无论是开发阶段,还是测试阶段,亦或程序运行阶段,都可以通过日志查看程序的运行情况,或是定位问题。下面是对 pyth
- IE6下浮出层常会需要增加一个iframe来解决浮出层被Obj穿透的问题,这个是目前最有效的方案,不过这个方案本身有个缺陷,就是iframe
- 打开sqlserver时提示评估期已过解决方法:打开sqlserver安装中心(注意:选择R2的安装中心)选择版本升级中途可能会出现需要重启
- python删除缓存文件的方法:首先输入“find.-name '__pycache__' -type d -exec rm
- CREATE TABLE `category` ( `Id` binary(1
- 本文实例讲述了Python实现的批量修改文件后缀名操作。分享给大家供大家参考,具体如下:windows和linux下都支持该程序
- 今天来分享python学习的一个小例子,使用python暴力破解mysql数据库,实现方式是通过UI类库tkinter实现可视化面板效果,在
- 在学习pygame模块过程中,我们可以通过使用 pygame模块实现很多功能性的东西,但是很多人应该没有利用pygame实现过雪花飘落的效果
- 本文实例讲解了tab响应式切换效果,利用js对样式进行动态切换即可。 多的不说,请看代码<html> <head>
- 基本环境配置python 3.6pycharmrequestsparseltime相关模块pip安装即可确定目标网页数据哦豁,这个价格...
- 以前有过一篇类似的文章, 讲的比较简单只有三个插件而已, 所以这篇文章将全持续更新.jQuery UI 大名顶顶, 不用介绍, 它的各个控件