Python如何实现考试自动答题功能
这篇文章主要介绍“Python如何实现考试自动答题功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python如何实现考试自动答题功能”文章能帮助大家解决问题。
一、准备环境
1)运行环境
开发环境:
Python3、Pycharm社区版。
importrequests--->数据请求模块pipinstallrequestsimportrefromseleniumimportwebdriver--->自动测试模块pipinstallselenium==3.141.0<指定版本安装>。
谷歌浏览器 以及 谷歌驱动 <版本和浏览器版本相对应> 环境没有安装的同学, 可以去安装。
2)模块安装
第三方库的安装方式如下:
一般安装:pip install +模块名
镜像源安装:pip install -i pypi.douban/simple/+模块名…
(还有很多国内镜像源,这里是豆瓣的用习惯了,其他镜像源可以去看下之前文章都有的)
二、代码展示
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音乐播放器