失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python 用题库自动答题器_python实现自动刷题

python 用题库自动答题器_python实现自动刷题

时间:2018-11-28 14:45:09

相关推荐

python 用题库自动答题器_python实现自动刷题

使用Python实现云豆网自动刷题

这些是一大佬写的我就解读一下

所有代码全是Py3

要有一些Python基础emmm不用太多

不懂就问我的QQ:2025450852

大体思路:

控制浏览器模拟点击

利用漏洞拿到正确答案

填入答案

需要导入的模块

from selenium import webdriver控制浏览器用

import time控制程序暂停防止网络延迟出现错误

py3内置模块不用下载

这些可以不用直接用input也行主要识别验证码

from PIL import ImageGrab#截图用的

import pytesseract #识别图片用的

from PIL import Image

正文

导入模块

from selenium import webdriver #控制浏览器用

import time #控制延时的

"""识图不想用下面不用导入可以用input"""

from PIL import ImageGrab#截图用的

import pytesseract #识别图片用的

from PIL import Image

定义几个变量为了代码的整洁

"""先定义几个变量为了代码的整洁"""

name = '123456789@'#这里填入你的账户

password = '123'#这里填入你的密码

"""还要再填入一个账户因为这个是利用的漏洞 后面会说什么漏洞"""

///还写过一个完美的不用漏洞版本,以后有心情会发出来,也欢迎交流指点///

name1 = '0987654321@' #填入另一个账户

password = '不知道' #填入另一个密码

用selenium控制浏览器

dr = webdriver.Chrome()#打开谷歌浏览器

dr.get('/login')#get方法打开指定网页

dr.maximize_window() #全屏打开

效果图

定义用户名 密码 并输入

dr.find_element_by_id("LoginForm_username").send_keys(name)#用户名输入框

dr.find_element_by_id("LoginForm_password").send_keys(password)#密码输入框

效果图

找到验证码 位置输入 和点击登录按钮

"""识图部分"""

img = ImageGrab.grab(bbox=(1468, 605, 1604, 660))#截取验证码的位置

img.save('111.png')#保存截取的图片

pytesseract.pytesseract.tesseract_cmd = '这里放tesseract的位置'

w_input = pytesseract.image_to_string(Image.open('111.png'))#识别验证码并保存在w_input里

"""或者用input"""

w_input = input(请输入验证码: )

"""定位验证位置同上"""

dr.find_element_by_id("LoginForm_verifyCode").send_keys(w_input) #输入验证码

"""定位登录按钮位置并点击"""

dr.find_element_by_id("login").click()#点击登录按钮

time.sleep(1) #给一秒时间根据你的网络好坏定

效果图(按input的方式演示//截图不懂也可以问我)

现在进入题库

选择课程点击云题库

dr.find_element_by_xpath('/html/body/div[2]/div/div/div/div/div/div/form/ul/li[2]/a').click()#选择课程

dr.find_element_by_xpath('/html/body/div/div/ul/li[4]').click()#进入题库

效果

将话柄定位到最新的位置

windows = dr.window_handles # 获取当前会话所有句柄

dr.switch_to.window(windows[-1]) #-1就是最新的标签

效果(两个标签所以要获取新话柄)

点击课程复习并进入试卷

dr.find_element_by_xpath("/html/body/div[3]/div[1]/div/div[2]/div/div[2]/span[4]/a").click()

#定位课程复习并点击

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

#点击第一个 如果点击第二个改一下定位

效果

这时候就要简单的提提那个漏洞了

账号1解析到交卷地址后在账号2上交卷

拿到答案再回到账号1填

账号2不会计入任何记录

账号1只会计入本日答题 全国排行和本班本校排行不会计入

完美的版本以后有心情在发 至于有多完美 哈哈哈

下面很多地方可以换一种方法解决为了照顾新手就只用selenium完成但还是简单提一下可以用什么:

弄交卷地址 和选项可以用正则表达式

点击选项可以用列表推导式或者哈希公式

这是常用的还有好多细节懒得提///想要细的找我要

进入试卷后分析交卷地址

o = dr.find_element_by_xpath("/html/body/div[2]/div/div/div[1]/div/a[2]")#定位到交卷地址

o = o.get_attribute("data")#提取出来

效果

下面不想写太详细了发生了点事情没心情

想听具体思路加我吧 等有心情讲给你

用小号打开

"""注意dr和drs"""

drs= webdriver.Chrome()#用来打开小号的

drs.maximize_window() # 全屏

drs.get("/login")#打开网页

drs.find_element_by_id("LoginForm_username").send_keys(name1) #用户名

drs.find_element_by_id("LoginForm_password").send_keys(password1)#密码

wa_input = input("密码")

drs.find_element_by_id('LoginForm_verifyCode').send_keys(wa_input)#验证码

drs.find_element_by_id('login').click() #点登陆

find_element_by_xpath('//*[@id="choose-course-form"]/ul/li[2]/a').click()#新界面 就是点进题库去

drs.find_element_by_xpath("/html/body/div[1]/div/ul/li[4]/a").click() #点击云题库

drs.switch_to.window(driver.window_handles[-1])#获取新话柄

"""重复内容不再细说"""

**和账号一登录过程是一样的不在放图**

小号打开交卷地址并交卷

time.sleep(2) #加个延时给反应时间用样按你的网速定

driver.get(o)#打开账号1的交卷地址

time.sleep(1)#延时

"""这三步是提取文字 先弄成列表 再用切片 再弄回来 .join()方法可以用正则一步就行"""

a = driver.execute_script("return document.documentElement.outerHTML")

b = a[126:166]

c = ("".join(b))

图就不弄了因为是漏洞明放出不好 看不懂代码问我

账号2进入错题界面

#可以在这里加个延时

drs.get(""+c)#进入错题界面

time.sleep(1)

drs.find_element_by_xpath("/html/body/div[2]/div/div[2]/div/div[2]/div[2]/div[2]/ul/li[1]/a").click() #点击查看解析 #到这里就是错题界面了

不上图了太麻烦 最后直接一个效果图

效果

拿到正确答案

aa = []#创建一个空列表用于放答案

"""下面内容可以改用正则用正则的话一行完事 为了照顾新手我用本方法想看正则写法找我要"""

#共20道题 每道题爬获取所有答案的文本格式 位置是从2往下延伸,2是第一题一直的到20题是21 for里到22的目的是为了执行下面except:

for f in range(2, 23):

try:

if f <= 22: #把答案爬下来 并且把生成的列表格式化为1234类型

xx =drs.find_element_by_xpath("/html/body/div[2]/div/div[2]/div["+str(f)+"]/div[3]/label/em").text #循环f用2开始(xpath2是第一道题3是第二道以次类推)每次循环都拿到正确答案存入aa列表中

if xx=="A":

aa.append("1")

elif xx=="B":

aa.append("2")

elif xx=="C":

aa.append("3")

elif xx=="D":

aa.append("4")

elif xx=="A,B":

aa.append("1,2")

elif xx=="C,D":

aa.append("3,4")

elif xx=="A,C":

aa.append("1,3")

elif xx=="A,D":

aa.append("1,4")

elif xx=="B,C":

aa.append("2,3")

elif xx=="B,D":

aa.append("2,4")

回到账号1将爬取的到正确答案选上

except:

#回到原有账号这里 开始答题

for F in range(2, 22): # 把所有可能性加进去

XX = F - 2#因为列表索引是从0开始所以要减2

print("第" + str(XX) + "题答案获取中")

FF = aa[XX]

if F <= 22:

"""下面的就是千篇一律将正确答案在账号1以上选上注意dr和drs

可以用正则表达式拿到全部选项位置用列表推导式点上"""

if FF == "1,2":

dr.find_element_by_xpath("/html/body/div[2]/div/div/div[2]/div[" + str(F) + "]/ul/li[1]/pre/input").click()

dr.find_element_by_xpath("/html/body/div[2]/div/div/div[2]/div[" + str(F) + "]/ul/li[2]/pre/input").click()

elif FF == "3,4":

dr.find_element_by_xpath("/html/body/div[2]/div/div/div[2]/div[" + str(F) + "]/ul/li[3]/pre/input").click()

dr.find_element_by_xpath("/html/body/div[2]/div/div/div[2]/div[" + str(F) + "]/ul/li[4]/pre/input").click()

elif FF == "1,3":

dr.find_element_by_xpath("/html/body/div[2]/div/div/div[2]/div[" + str(F) + "]/ul/li[1]/pre/input").click()

dr.find_element_by_xpath("/html/body/div[2]/div/div/div[2]/div[" + str(F) + "]/ul/li[3]/pre/input").click()

elif FF == "1,4":

"""千篇一律,不全弄了自己写所有可能性"""

下面交卷什么的xpath就不写了想弄的话自己填上就行

一切只做学习与交流不作任何商业用途

原文链接:/sui_bianqwe/article/details/105356550

如果觉得《python 用题库自动答题器_python实现自动刷题》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。