使用Python实现自动刷题 P2
只做学习交流,不做任何商业用途
不同于P1的漏洞,这次是题库爬到本地进行匹配
没有第一篇详细,主要讲讲思路传送门
集刷题和补全题库为一体
源码:
- github: https://github/liliuyang-808/sab.git
- 百度网盘: 链接:https://pan.baidu/s/1UdPIlQyd1_nudhdjespdfA 提取码:1320
在百度网盘里有操作视频
因为直接用答题的网站违规 , 所以自己写了个答题网站 . 在源码里有.
写的稀烂,凑活着看.
大体思路
- 控制浏览器模拟点击
- 将题目和答案存进txt , 用正则匹配
- 将txt里题目和答案补全(来回爬…)
需要导入的模块
- from selenium import webdriver 控制浏览器用
-
- selenium下载地址
-
- chrome浏览器下载地址
-
- chromedrive
-
- 火狐drive
-
- edge_drive
-
- 推荐篇配置教程
- import time 控制程序暂停防止网络延迟出现错误
-
- py3内置模块不用下载
- import re
导入模块
from selenium import webdriver
import re
初始化环境
dr = webdriver.Chrome()
dr.maximize_window()
dr.get('答题网站地址/bank/index.html')
- 答题网站页面
自动选题
爬取页面中所有题目和选项
html = dr.page_source
timu = re.findall('<div class="sec_next">(.*?)</div>', html) # 爬取答案
# 爬取题目 多做一步原因是要分出一题多少选项
xuxa_s = re.findall('<ul>(.*?)</ul>', html.replace("\n", ""))
xuxa = []
for i in xuxa_s:
xuxa.append(re.findall('<label for=".*?">(.*?)</label>', i))
# 现在 xuxa列表里是[[A..,B..,C..,D..,E..],[A..],[A..,B..]]
存储所有选项按钮
- 正确答案在整合后会以索引方式结束 , 用索引去点击选项
button=[]#存储所有选项按钮
for nk in dr.find_elements_by_tag_name("input"):
button.append(nk)
在txt文件中爬下存储好的题目->答案(如果没有也没问题,有补全的代码)
with open(r'./write.txt', encoding='utf-8') as f:
res = f.read()
reo_timu=re.findall('题目:(.*?)\n',res)
reo_xuxa=re.findall('答案:(.*?)\n',res)
到正文了
also=[] #所有正确答案 一维数组
also_txt=[]#正确答案 不过有特殊定义的符号 "|" 可以看上面那张图最后一行 这是隔开多个选项用的
number=[]#存储txt中没有的题目的序号 在最后补全txt的地方有用到
xuxa_index=[i for arr in xuxa for i in arr]#转成一维数组方便对齐索引
"""
因为 xuxa列表为了让5个6个乃至10个选项穿插在整体中而程序不崩溃 ,才出此下策
[[A..,B..,C..,D..,E..],[A..],[A..,B..]]
但是所有选项按钮却是个一维的数组
需要让答案下标和选项按钮下标对齐才好操作
"""
for i in range(0,len(timu)):
if timu[i] in reo_timu:#判断页面中的题目在txt中存不存在
also_txt.append(reo_xuxa[reo_timu.index(timu[i])])#正确答案 (目前还是文字形式)
else:
number.append(i)#没有的题目的序号
also_txt.append(xuxa[i][0])#如果没有 , 填入选项中第一项
for a in also_txt:
lis = a.split('|')
for j in lis:
also.append(j)#在这里所有正确选项变成一维数组
将选项列表变成下标索引 并点击
#所有正确选项索引
index=[]
for i in also:
index.append(xuxa_index.index(i))
#用正确答案索引点击按钮
for i in index:
button[i].click()
自动爬取补满文档
提交后补全txt部分
- 将错题目答案放入add_to 在写入txt
- 这里就不过多赘述. 每个网站交卷后都不一样 ,这里逻辑简单根据需要更改就行
input("提交后: ")
add_to = {}
lang=dr.page_source
temp = re.findall('<span>(.*?)</span>', lang)
for num in number:
add_to[timu[num]]=temp[num]
print(add_to)
write_in = open(r'./write.txt', 'a', encoding='utf-8') # 用可读写的权限打开txt
for code_a, answer_a in add_to.items(): # 同上一个for一样的道理
write_in.write("题目:" + code_a + "\n") # 存储正确的题目和正确答案
write_in.write("答案:" + answer_a + "\n") # 同上
一切只做学习交流, 不做任何商业用途
- 为什么不用ABCD 或者编号直接代替正确答案:
-
- 因为有些网站答案随机排序
受一大佬启发才写出这里,也许没大佬到死也完不成[万分感谢,向您鞠躬]
上一篇违禁文章里的问题有位大佬解决了
取图片地址 relativePath后面两个哈希值 第二个哈希值减去账号id就是真实的图片地址
relativePath=0009000/1543302712345/bf1b51531de4c292667e1c4c2300b603.jpg&imageType=2
https://tiku.kgc/testing/index/123456/a76e1c6d3baf4be1b9aa172fa6273305
我qq:2025450852 欢迎交流
更多推荐
使用Python实现自动刷题 P2
发布评论