python实现自动刷题

您所在的位置:网站首页 如何制作火焰字不影响画面 python实现自动刷题

python实现自动刷题

2023-10-03 12:12| 来源: 网络整理| 查看: 265

源码就是所有代码块

使用Python实现云豆网自动刷题 这些是一大佬写的我就解读一下

所有代码全是Py3

在这里插入图片描述

**要有一些Python基础emmm不用太多 大体思路:

控制浏览器模拟点击利用漏洞拿到正确答案填入答案

需要导入的模块

from selenium import webdriver 控制浏览器用 selenium下载地址 chrome浏览器下载地址 chromedrive 火狐drive edge_drive 推荐篇配置教程 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 = '[email protected]' #这里填入你的账户 password = '123' #这里填入你的密码 """还要再填入一个账户因为这个是利用的漏洞 后面会说什么漏洞""" ///还写过一个完美的不用漏洞版本,以后有心情会发出来,也欢迎交流指点/// name1 = '[email protected]' #填入另一个账户 password = '不知道' #填入另一个密码

用selenium控制浏览器

dr = webdriver.Chrome() #打开谷歌浏览器 dr.get('http://s.bdqn.cn/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) #密码输入框 效果图用id定位后面大多是xpath

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

"""识图部分""" 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("http://s.bdqn.cn/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("http://tiku.kgc.cn"+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


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3