Python如何实现考试自动答题功能


这篇文章主要介绍“Python如何实现考试自动答题功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python如何实现考试自动答题功能”文章能帮助大家解决问题。

一、准备环境

1)运行环境

开发环境:

Python3、Pycharm社区版。

importrequests--->数据请求模块pipinstallrequestsimportrefromseleniumimportwebdriver--->自动测试模块pipinstallselenium==3.141.0<指定版本安装>。

谷歌浏览器 以及 谷歌驱动 <版本和浏览器版本相对应> 环境没有安装的同学, 可以去安装。

2)模块安装

第三方库的安装方式如下:

一般安装:pip install +模块名

镜像源安装:pip install -i pypi.douban/simple/+模块名&hellip;

(还有很多国内镜像源,这里是豆瓣的用习惯了,其他镜像源可以去看下之前文章都有的)

二、代码展示

1)爬虫实现思路

一. 数据来源分析 --> 通过浏览器 开发者工具 抓包分析

1. 明确需求:- 明确采集的网站是什么

题目答案页面: tiba.jsyks/Post/2c15b.htm

2. 分析这两个数据怎么获取

数据来自于 --> 答案页面

第一题: tiba.jsyks/Post/2c15b.htm

问题: 获取1701道题目 --> 分析每个题目答案页面URL构成

第一题: tiba.jsyks/Post/2c15b.htm

第二题: tiba.jsyks/Post/8ac1a.htm

第三题: tiba.jsyks/Post/e97d7.htm2c15b / 8ac1a / e97d7

所以 只需要获取所有答案页面ID, 即可获取所有题库 。

2)自动答题主程序

#导入自动化测试模块-->重点3.141.0版本fromseleniumimportwebdriver#导入pandasimportpandasaspd#导入正则importredf=pd.read_csv('题库.csv')key=[]value=[]#获取每一道题目foriindf['Problem']:#问题作为键#把题目添加到列表里面key.append(i)#获取每一道题目答案forjindf['Answer']:#问题作为值#把答案添加到列表里面value.append(j)#把两个列表合并成字典dic=dict(zip(key,value))"""1.打开浏览器Chrome浏览器谷歌webdriver.Chrome('驱动路径')I.驱动选择根据你自己浏览器版本,选择驱动版本,最相近即可驱动只有32II.驱动路径写法1.不写路径-驱动和你代码在一起-驱动和你python安装目录在一起2.写路径绝对路径"""driver=webdriver.Chrome()#2.访问网站driver.get('jsyks/kms-fzks')driver.maximize_window()"""答题操作:1.题库<获取出来了>读取csv文件,把题目内容以及答案读取出来1701道题,要读1701次啊?可以把问题作为字典键,答案作为字典值根据问题,可以获取答案定位元素,获取数据内容"""print(dic)forpageinrange(50):Questions=driver.find_element_by_css_selector('#ExamTit').text#\d+匹配数字获取题目Question=re.findall('\d+.(.*)',Questions)[0]answer=dic[Question]#多选题,答案肯定大于1iflen(answer)==1:#判断答案内容选择选项ifanswer=='对':#定位对元素,进行点击操作driver.find_element_by_css_selector('#TX1#btnDa11').click()elifanswer=='错':driver.find_element_by_css_selector('#TX1#btnDa12').click()elifanswer=='A':driver.find_element_by_css_selector('#TX2#btnDa21').click()elifanswer=='B':driver.find_element_by_css_selector('#TX2#btnDa22').click()elifanswer=='C':driver.find_element_by_css_selector('#TX2#btnDa23').click()elifanswer=='D':driver.find_element_by_css_selector('#TX2#btnDa24').click()#点击下一题driver.find_element_by_css_selector('#actArea#btnNext2').click()eliflen(answer)>1:#多选forxinanswer:ifx=='A':driver.find_element_by_css_selector('#TX2#btnDa21').click()elifx=='B':driver.find_element_by_css_selector('#TX2#btnDa22').click()elifx=='C':driver.find_element_by_css_selector('#TX2#btnDa23').click()elifx=='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_Msgspaninput:nth-child(1)').click()

3)题库主程序

importrequestsimportreimportcsvimportconcurrent.futuresimportparseldefAnswerID():f=open('答案ID.txt',encoding='utf-8')answer_id_list=[answer_idforanswer_idinf.read().split(',')]returnanswer_id_listdefGetResponse(html_url):headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/101.0.0.0Safari/537.36'}html_data=requests.get(url=html_url,headers=headers).textreturnhtml_datadefGetContent(AnswerID):AnswerUrl=f'tiba.jsyks/Post/{AnswerID}.htm'html_data=GetResponse(html_url=AnswerUrl)selector=parsel.Selector(html_data)problem=selector.css('#questiona::text').get()answer=selector.css('#questionh2b::text').getall()iflen(answer)==0:answer=selector.css('#questionh2u::text').get()AnswerDict={'Problem':problem,'Answer':answer,}returnAnswerDictdefmain(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)foranswer_idinanswer_id_list:exe.submit(main,answer_id)exe.shutdown()

三、效果展示

1)自动答题

2)自动上交试卷

很多人问为什么只有96分没得100分?

因为题库下载的题目答案是错误的修正之后就可以啦!

关于“Python如何实现考试自动答题功能”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注主机评测网行业资讯频道,小编每天都会为大家更新不同的知识点。


上一篇:MybatisPlus如何实现insertBatchSomeColumn进行批量增加

下一篇:Qt如何实现MP3音乐播放器


Copyright © 2002-2019 测速网 www.inhv.cn 皖ICP备2023010105号
测速城市 测速地区 测速街道 网速测试城市 网速测试地区 网速测试街道
温馨提示:部分文章图片数据来源与网络,仅供参考!版权归原作者所有,如有侵权请联系删除!

热门搜索 城市网站建设 地区网站制作 街道网页设计 大写数字 热点城市 热点地区 热点街道 热点时间 房贷计算器