本文解释一下代码,如果有想要用机器刷题的(前提是能找的到答案),可以参考一下。

开发原因:作业又多又无聊自己不想做,干脆用机器刷题。

主要方法:主要用Python的selenium库实现刷题。

需要基础:Python你得会点吧 html你得会的吧 正则表达式你得会点吧

登录部分

导入以下包

from selenium import webdriver

#导入selenium的webdriver 如果这个看不懂的话请移步selenium教程

from fuzzywuzzy import fuzz

#计算相似度的工具,没听过也没关系,看到了自己查

import re

import random

定义一些变量

name='15000000'

#用户名

password='**********'

#密码

wrong=85

#准确率(百分比)

count=148

#总题数

wrong=count*(100-wrong)*0.01

#错题数

然后打开登录界面

dr=webdriver.Chrome()

#用chrome打开 Firefox同理

dr.get('http://passport2.chaoxing.com/login?fid=1400&refer=http://i.mooc.chaoxing.com/space/index.shtml')

自动输入用户名密码,手动输入验证码

dr.find_element_by_class_name("zl_input").send_keys(name)

dr.find_element_by_class_name("zl_input2").send_keys(password)

#上面是用class name定位的用户名密码位置(用F12找)

code=input('Verification code >>>')

dr.find_element_by_class_name("zc_input32").send_keys(code)

dr.find_element_by_class_name("zl_btn_right").click()

#手动输入验证码,并用相同方法填入,并点击登录

登录图

定位到作业部分

尝试点击《计算机网络基础》学测,(你会发现没用,待会解释为什么没用)

dr.find_element_by_xpath("/html/body/div/div[2]/div[2]/ul/li[2]/div[2]/h3/a").click()

#用xpath的方式定位超链接,并click。请自己补充一定的xpath知识。

下图是如何在chrome中找到元素xpath的方法(xpath 大概就是 一种唯一定位html元素的方式#我自己也不是很清楚)

image.png

用selenium定位元素是没有办法跨frame的,所以需要定位某元素时,dr必须在某frame中。所以需要找到对应的frame并层层切换过去。用F12找到课程所在frame的ID-->frame_content,然后

dr.switch_to_frame('frame_content')

#用这个方法切frame

dr.find_element_by_xpath("/html/body/div/div[2]/div[2]/ul/li[2]/div[2]/h3/a").click()

#再点击,会打开一个新标签页

打开新标签以后要把dr切换到新标签中

dr.switch_to_window(dr.window_handles[1])

#dr.window_handles是所有标签的句柄list

想办法点击进入题目页

hwxpath='/html/body/div[6]/div[1]/div[2]/div[3]/div/div[2]/h3/span[2]/a'

dr.find_element_by_xpath(hwxpath).click()

image.png

进去以后

image.png

处理题目

点进去以后发现 题目被三层frame嵌套所以要切进去:

dr.switch_to_frame(0)

dr.switch_to_frame(0)

dr.switch_to_frame(0)

#0就是切入当前frame下的第一个frame,虽然这样不是很规范,但是方便啊,无脑啊

好现在dr在题目的frame里了,现在要把所有的单选框放在一个列表里。我们用find_elements_by_tag_name方法(根据标签名寻找),因为所有的单选框都是。但是并不是所有的input标签都是单选框,看了看发现只有可见的input标签才是单选框。所以我们要做两件事,找到所有input,然后再在这里面挑出所有display的:

inputs=[]

for n in dr.find_elements_by_tag_name('input'):

if n.is_displayed():

inputs.append(n)

print(n,'ok')

上一步做完,所有的单选框都在inputs这个list里了,四个一组(ABCD)。然后用正则表达式从页面源码中提取出所有题目。

qs=re.findall('(\d*?)[\s\S]*?【单选题】([\s\S]*?)

',dr.page_source)

然后要找对应的答案,查了一下,发现,这个练习的所有题目来自一个题库,下载该题库,保存成answer.txt存在同一目录下。然后把问题和答案分别用正则表达式提取出来,一一对应。

image.png

with open(file,'r',encoding='utf-8') as f:

ass=f.read()

asq=re.findall('\d+ . (.*?)\n',ass)

asa=re.findall('答案:(.)',ass)

接下来就是匹配页面上的问题和下载的答案集了。但是因为页面源码和某些原因,题目可能会比答案多个空格少个字符什么的,所以有的时候不能完全匹配,就需要用模糊匹配和全匹配结合的方法。思路:先全匹配(因为快),如果不行,就计算两个题目的相似度,取相似度最高的。

asls=[]

for i in qs:

if i[1] in asq:

asls.append(asa[asq.index(i[1])])

else:

rls=[fuzz.ratio(i,ii) for ii in asq]

op=asa[rls.index(max(rls))]

asls.append(op)

#asls 里的结果大概就是这个样子['A','C','B'............'B']

然后我们要把所有的ABCD点上啊,第一个的A对应inputs里的0,B对应1......第二个的A对应4所以有公式——(ABCD的ASCII码-65+列表下标乘4)

asls=[ord(i)-65+e*4 for e,i in enumerate(asls)]

#列表推倒,不会的话自己用for写

#asls 里的结果大概就是这个样子[0,6,12........]

最后把inputs里的相应下标的inputs标签点击一下

for i in asls:

inputs[i].click()

当然,不能做全对吧,那就随机瞎点几个答案吧(错误率根据开始定义的错误率)

for i in range(int(wrong)):

random.choice(inputs).click()

全部解释完,撒花

下面贴全部源码

from selenium import webdriver

from fuzzywuzzy import fuzz

import re

import random

name='15000232'

password='a1008611'

wrong=85

count=148

wrong=count*(100-wrong)*0.01

dr=webdriver.Chrome()

dr.get('http://passport2.chaoxing.com/login?fid=1400&refer=http://i.mooc.chaoxing.com/space/index.shtml')

#open website

dr.find_element_by_class_name("zl_input").send_keys(name)

dr.find_element_by_class_name("zl_input2").send_keys(password)

code=input('Verification code >>>')

dr.find_element_by_class_name("zc_input32").send_keys(code)

dr.find_element_by_class_name("zl_btn_right").click()

#login

dr.switch_to_frame('frame_content')

dr.find_element_by_xpath("/html/body/div/div[2]/div[2]/ul/li[2]/div[2]/h3/a").click()

dr.switch_to_window(dr.window_handles[1])

#switch to frame and click 'SQL SERVER'

hwxpath='/html/body/div[6]/div[1]/div[2]/div[3]/div/div[2]/h3/span[2]/a'

dr.find_element_by_xpath(hwxpath).click()

dr.switch_to_frame(0)

dr.switch_to_frame(0)

dr.switch_to_frame(0)

inputs=[]

for n in dr.find_elements_by_tag_name('input'):

if n.is_displayed():

inputs.append(n)

print(n,'ok')

qs=re.findall('(\d*?)[\s\S]*?【单选题】([\s\S]*?)',dr.page_source)

file='answers.txt'

with open(file,'r',encoding='utf-8') as f:

ass=f.read()

asq=re.findall('\d+ . (.*?)\n',ass)

asa=re.findall('答案:(.)',ass)

asls=[]

for i in qs:

if i[1] in asq:

asls.append(asa[asq.index(i[1])])

else:

rls=[fuzz.ratio(i,ii) for ii in asq]

op=asa[rls.index(max(rls))]

asls.append(op)

asls=[ord(i)-65+e*4 for e,i in enumerate(asls)]

for i in asls:

inputs[i].click()

for i in range(int(wrong)):

random.choice(inputs).click()

当然你们做的题和我的不一样,所以要自己改改,这个程序并不是很健全,因为我懒就这样。

python题库刷题训练软件_自动刷题机 Python 解释源码 超新泛雅相关推荐

  1. python刷快手极速版_自动刷快手极速版脚本当前页面出现

    很简单的,现在就尝试一下吧 wait:线程不再活动,不再参与调度,进入 wait set 中,因此不会浪费 CPU 资源,也不会去竞争锁了,这时的线程状态即是 WAITING可以根据提示在属性页中直接 ...

  2. python量化实战 顾比倒数线_顾比倒数线 主图源码

    好股票软件下载网(www.goodgupiao.com)提示:您正在下载的是:顾比倒数线 主图源码 P:=21; WH1:=IF(L=LLV(L,P),L,DRAWNULL); WH2:=CONST( ...

  3. Python爬虫爬取表情包+Autojs微信自动导入表情包脚本(附源码)

    废话不多说直接开始 Python爬取表情包 一.检查网页源码 发现可以找到图片地址,直接请求图片地址下载图片 二.打开开发者工具(F12) 通过xpath提取p标签下的img标签src属性为图片地址 ...

  4. php题库app_2020新版PHP在线考试系统在线测试练习做试题网站源码 带手机端

    功能与优点: 1.强化训练测验,对知识点进行单独练习 : 2.随机组卷练习,系统自动抽取题目进行练习 : 3.手工组卷联系,通过教师平台手工组卷形成考卷进行模拟练习 : 4.支持主客观题型并存,主观题 ...

  5. 人脸检测颜值软件_百度AI人脸识别测颜值源码

    百度AI人脸识别测颜值由百度AI官方推出百度AI人脸识别测颜值源码,目前已将人脸识别氛围V2和V3两个接口,使用前需要参考相应的文档权限来选择接口类型.今天为大家带来的源码,就是让大家能够了解学习到百 ...

  6. 1000道Python题库系列分享23(61个填空题)

    封面图片:<玩转Python轻松过二级>,董付国,清华大学出版社 ================= 本期题目,参考答案在文末: 温馨提示 关注本公众号"Python小屋&quo ...

  7. 1000道Python题库系列分享13(22道填空题)

    上期题目链接:1000道Python题库系列分享十二(9道编程题) 上期题目答案: 本期题目: --------董付国老师Python系列教材-------- 1)<Python程序设计(第2版 ...

  8. 计算机c语言二级题库及答案txt,计算机二级c语言题库及答案

    计算机二级c语言题库及答案Tag内容描述: 1.2016年计算机二级c语言题库及答案一.选择题(每小题1分,共40小题,共40分)1.设循环队列的存储空间为Q(1:35),初始状态为front=rea ...

  9. 真题园-最全的免费海量历年真题试卷下载及答案解析的真题题库网站,无需注册!找真题,上真题园!爱学习,找真题!

    真题园-www.zhentiyuan.com,网站全新上线,最全的免费海量历年真题试卷下载及答案解析的真题题库网站,无需注册!找真题,上真题园!爱学习,找真题! 真题园成立于2014年5月,是一个可以 ...

最新文章

  1. mysql整形溢出报错_MySQL整型数据溢出的解决方法
  2. NOIP2017 列队
  3. wxWidgets:wxControl类用法
  4. Kaggle API
  5. java 服务器 文件写入文件_java 从服务器下载文件并保存到本地
  6. c++设置单元格填充色_格式函数text,设置自定义格式的万金油
  7. 重载(overload)与重写(override)的区别
  8. 【Java】浅谈关键词transient的使用
  9. c语言实现队列基本算法,【算法】队列的C语言实现
  10. OpenCV-Python实战(23)——将OpenCV计算机视觉项目部署到云端
  11. python round_python round()
  12. 再谈IE的浏览器模式和文档模式[转]
  13. React脚手架安装
  14. 创建简单vue项目 / Webpack创建vue项目
  15. 2019腾讯后台开发详细面试流程
  16. 荷兰国旗问题python_荷是什么意思 荷字五行属什么
  17. html表格只设外边框,只设内边框
  18. 伤害世界服务器连接失败_伤害世界服务器怎么架设_伤害世界服务器架设图文教程_玩游戏网...
  19. IBM车库创新:为科技创新头号工程打造共创引擎
  20. Python: dict vs defaultdict

热门文章

  1. 第03章 成人感冒不是大事,少往急诊跑
  2. css网页布局之定位流,JavaScript
  3. 打卡-2023-4-2
  4. linux删除目录下文件|删除文件保持目录结构|各种删除方法总结
  5. python 库函数ppt_《Python电子教案5-1 函数和代码复用》.ppt
  6. CentOS如何查看本机ip
  7. nova7se乐活版升级鸿蒙,华为nova7SE乐活版有什么缺点-华为nova7SE乐活版优缺点介绍...
  8. 半入耳式真无线蓝牙耳机测评,南卡和漫步者蓝牙耳机哪个音质更好?
  9. 如何控制HTML中DIV的加载顺序
  10. 走!本周六,看放空、媛媛和C姐去,Cocos官方分享会!