前言
嗨喽~大家好呀,这里是魔王呐 ❤ ~!
目录
- 前言
- 环境使用:
- 模块使用:
- 程序实现思路: <模板> 获取题库
- 一. 获取题库 --> 问题+答案
- 二. 进行自动答题操作
- 代码展示
- 题库采集
- 自动答题
- 尾语 💝
环境使用:
-
解释器版本 >>> 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 模块名
(如果你觉得安装速度比较慢, 你可以切换国内镜像源)
可找我获取的:
-
驱动安装教程
-
素材: 答案ID文本获取
程序实现思路: <模板> 获取题库
一. 获取题库 --> 问题+答案
一. 数据来源分析 --> 通过浏览器 开发者工具 抓包分析
-
明确需求:
-
明确采集的网站是什么
题目答案页面: https:///Post/2c15b.htm
-
明确采集的数据是什么
-
问题
-
答案
-
-
-
分析这两个数据怎么获取
已知: 问题/答案 数据来自于 --> 答案页面 第一题: https:///Post/2c15b.htm
问题: 获取1701道题目 --> 分析每个题目答案页面URL构成
第一题: https:///Post/2c15b.htm
第二题: https:///Post/8ac1a.htm
第三题: https:///Post/e97d7.htm
2c15b / 8ac1a / e97d7
所以 只需要获取所有答案页面ID, 即可获取所有题库
二. 代码实现步骤
-
发送请求, 模拟浏览器对 答案页面url地址 发送请求
-
获取数据, 获取网页源代码
-
解析数据, 提取我们想要的数据内容
-
保存数据, 保存数据 <保存表格里面即可>
二. 进行自动答题操作
模拟人的行为, 进行答题操作
-
打开浏览器
-
访问网址 <答题网址>
循环操作:
-
浏览题目, 选择正确答案, 点击下一题
和题库的内容进行对比, 获取答案, 选择选项
-
继续答题, 继续点下一题
代码展示
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()
尾语 💝
要成功,先发疯,下定决心往前冲!
学习是需要长期坚持的,一步一个脚印地走向未来!
未来的你一定会感谢今天学习的你。
—— 心灵鸡汤
本文章到这里就结束啦~感兴趣的小伙伴可以复制代码去试试哦 😝