网课通

绝对安全的简易智慧树刷课脚本!Python代码篇

admin10730

背景

之前由于疫情原因,全中国的苦逼大学生都被关在家里上网课,然后中国大学MOOC、智慧树等网课平台就成了一生之敌。

以博主为例,博主的马原课在智慧树放了100+个小视频,每个视频中间还穿插问题,防止你无脑刷,结束后还不能自动下一集。由于实在不想浪费时间,博主就做了一个十分安全的简易刷课脚本。

主要思想

智慧树是会对恶意刷课的账号进行警告的,具体判断机制我也不是很清楚,但是我的脚本是利用网页驱动器进行模拟点击,所以除了后台会记录你一天连续看了20小时视频之外(可以调整刷课数量上限防止被查),完全没有任何风险,平台是绝对发现不了你的。

主要使用了selenium,(关于selenium和chrome的版本对应关系请访问下列网址:selenium和chrome版本对应)来模拟点击网页的按钮,从而自动地刷课。(注意:电脑会给你单独开一个chrome图标,不要管即可)

使用说明

  1. 将代码copy进python3编译器运行(前置包:tkinter、selenium、re、time,版本主要selenium对应自己的chrome即可)

  2. 随后会出现一个极简风的UI(我知道很丑,请谅解博主没啥时间)

  1. 然后去自己的课程学习网站复制网址(必须是你看视频的网址),示例如下(没给网课信息打码,罪过罪过)

  2. 复制完成后把信息按照UI界面的提示输入(更大刷课数可以不填,默认为无限大,其他不填会有UI提示,但是对学校/学号/密码错误没有提示)

  1. 点击那个“智慧树爆炸按钮”,就可以生成一个新的驱动器执行的网页。此时网页驱动器就会自动学习了(如果有少数由于博主数据不够而没能发现的弹窗,自行关闭即可)。每节进度达标后会自动跳到下一节,而且可以自动寻找弹窗测验的答案并作答。也就是说,完成后你只需要把它晾那儿就行了。

    绝对安全的简易智慧树刷课脚本!Python代码篇

注意点

  1. 该代码仅支持共享课的刷课,不支持翻转课等其他类型的刷课(请谅解,因为博主本人的翻转课很少,就没有设计)

  2. 由于某些原因(懒),该程序仅支持通过学校-学号-密码的方式登陆。

    绝对安全的简易智慧树刷课脚本!Python代码篇

    绝对安全的简易智慧树刷课脚本!Python代码篇

  3. 由于博主本人是科研狗,也没有打算把这个程序过度实用化,所以没有在程序上投入太多精力,也不打算长期维护。可能会存在一定的bug,大部分bug仅需要重新跑一遍即可。

  4. 由于懒,没有加入对密码/账号/学校输入错误的防御机制,大家自己自觉吧(求求大家不要抱着挑刺的态度使用程序,这个程序本来就是我个人用的,本来连UI都么得,所以你要挑刺是肯定挑不完的,毕竟我没有把它当实际的项目做)

  5. 代码仅支持自动跳转下一节课、自动解决弹窗测验。没有办法解决章测试(博主么得数据库)。

  6. 如果有问题,可以在评论区提问,欢迎各路大神回答。因为博主本人实在是诸事缠身,可能不能及时解决每一个问题(说实话,过了一个星期我看到的时候,都不好意思回答,因为很可能多此一举,笑哭.jpg)

  7. 能自己解决的问题麻烦大家尽量手动解决,比如多一个消息弹窗没关掉(因为博主是以自己的学习经历作为模板设计的程序,有些情况可能没碰过)。

fromseleniumimportwebdriver
import timeimport reimport randomfrom selenium.webdriver.common.action_chainsimportActionChains
import tkinterastk
import tkinter.messageboxtime_percent = re.compile('\d+\.\d+(?=%)')
classtask:
   def __init__(self, url, school,account, pwd, max_lesson):        self.url = url        self.school = school        self.account = account        self.pwd = pwd        self.max_lesson = max_lessondef window_tk(driver):    try:
       driver.find_element_by_xpath('/html/body/div[1]/div/div[6]/div/div[1]/button').click()
   except:        pass    try:
       driver.find_element_by_xpath('/html/body/div[1]/div/div[3]/div/div[1]/button').click()
   except:        pass    try:
       driver.find_element_by_xpath('/html/body/div[1]/div/div[8]/div/div[2]/span/button').click()
   except:        pass    # 解决弹题测验    options = driver.find_elements_by_class_name('topic-item')
   # print(len(options))    foroptioninoptions:
       try:
           option.click()        except:            pass    try:
       answer = driver.find_element_by_class_name('answer').get_attribute('textContent')
       answers = re.findall('[A-Z]', answer)
       # print(answers)        foroptioninoptions:
           try:
               option.click()            except:                pass        foriinrange(10):
           ifchr(ord('A') + i)inanswers:
               options[i].click()        time.sleep(1)
       buttons = driver.find_elements_by_class_name('btn')
       # print(len(buttons))        forbuttoninbuttons:
           try:
               button.click()            except:                pass        time.sleep(2)
       try:
           driver.find_element_by_class_name('playButton').click()
       except:            pass    except:        buttons = driver.find_elements_by_class_name('btn')
       forbuttoninbuttons:
           try:
               button.click()            except:                pass    # 智慧树警告    try:
       driver.find_element_by_class_name('el-dialog__headerbtn').click()
   except:        passdef auto_study(url, school, student_id, pwd, maxlearn=1e9):
   opt = webdriver.ChromeOptions()    driver = webdriver.Chrome(options=opt)    try:
       driver.get(url)    except:        return-1
   time.sleep(2)
   driver.find_element_by_xpath('/html/body/div[4]/div/div[2]/div[1]/a[2]').click()
   driver.find_element_by_xpath('/html/body/div[4]/div/form/div[1]/ul[2]/li[1]/div/input[2]').send_keys(school)
   driver.find_element_by_xpath('/html/body/div[4]/div/form/div[1]/ul[2]/li[1]/div/div/div/div[1]/ul/li[1]').click()
   driver.find_element_by_xpath('/html/body/div[4]/div/form/div[1]/ul[2]/li[2]/input').send_keys(student_id)
   driver.find_element_by_xpath('/html/body/div[4]/div/form/div[1]/ul[2]/li[3]/input').send_keys(pwd)
   driver.find_element_by_xpath('/html/body/div[4]/div/form/div[1]/span').click()
   time.sleep(1)
   driver.back()    window_tk(driver)    time.sleep(1)
   guanbis = driver.find_elements_by_class_name('iconguanbi')
   forguanbiinguanbis:
       try:
           guanbi.click()        except:            pass    window_tk(driver)    time.sleep(3)
   ac = ActionChains(driver)    ac.move_to_element(driver.find_element_by_class_name('vjs-tech')).perform()
   driver.find_element_by_class_name('volumeBox').click()
   # 无限学习开始    fortime_slipinrange(int(1e9)):
       window_tk(driver)        try:
           iffloat(re.search(time_percent, driver.find_element_by_class_name('passTime').get_attribute('style')).group()) >90:
               try:
                   driver.find_element_by_id('nextBtn').click()
                   maxlearn -=1
                   ifmaxlearn <=0:
                       return
                   time.sleep(2)
                   driver.find_element_by_class_name('volumeBox').click()
               except:                    pass            try:
               ActionChains(driver).move_to_element(driver.find_element_by_class_name('vjs-tech')).perform()
           except:                print('fail')
           try:
               driver.find_element_by_class_name('playButton').click()
           except:                pass        except:            pass        time.sleep(3)
   # driver.find_element_by_id('/html/body/div[1]/div/div[8]/div/div[1]/button').click()
if__name__ =='__main__':
   window= tk.Tk()
   window.title('智慧树 *** ')
   window.geometry('780x650')
   canvas = tk.Canvas(window, width=780, height=821, bd=0, highlightthickness=0)
   title1 = tk.Label(window, bg='yellow', width=20, text='待刷课程网址')
   title2 = tk.Label(window, bg='yellow', width=20, text='学校')
   title3 = tk.Label(window, bg='yellow', width=20, text='学号')
   title4 = tk.Label(window, bg='yellow', width=20, text='密码')
   title5 = tk.Label(window, bg='yellow', width=20, text='更大刷课数')
   canvas.create_window(100,50, width=100, height=40,window=title1)
   canvas.create_window(100,150, width=100, height=40,window=title2)
   canvas.create_window(100,***, width=100, height=40,window=title3)
   canvas.create_window(100,350, width=100, height=40,window=title4)
   canvas.create_window(100,450, width=100, height=40,window=title5)
   entry1 = tk.Entry(window, bg ='white')
   entry2 = tk.Entry(window, bg='white')
   entry3 = tk.Entry(window, bg='white')
   entry4 = tk.Entry(window, bg='white')
   entry5 = tk.Entry(window, bg='white')
   canvas.create_window(450,50, width=600, height=40,window=entry1)
   canvas.create_window(300,150, width=300, height=40,window=entry2)
   canvas.create_window(300,***, width=300, height=40,window=entry3)
   canvas.create_window(300,350, width=300, height=40,window=entry4)
   canvas.create_window(200,450, width=100, height=40,window=entry5)
   def start_task():        t = task(entry1.get(), entry2.get(), entry3.get(), entry4.get(), entry5.get())        ifnot t.url:
           tk.messagebox.showinfo('靠,出错了','啊咧咧\n网址还没填呢!')
           return
       ifnot t.school:
           tk.messagebox.showinfo('靠,出错了','啊咧咧\n学校还没填呢!')
           return
       ifnot t.account:
           tk.messagebox.showinfo('靠,出错了','啊咧咧\n学号还没填呢!')
           return
       ifnot t.pwd:
           tk.messagebox.showinfo('靠,出错了','啊咧咧\n密码还没填呢!')
           return
       ifnot t.max_lesson:
           t.max_lesson =10000000
       try:
           t.max_lesson = int(t.max_lesson)        except:            tk.messagebox.showinfo('靠,出错了','啊咧咧\n更大课程数必须填正整数哦')
           return
       out = auto_study(t.url, t.school, t.account, t.pwd, t.max_lesson)        ifout ==-1:
           tk.messagebox.showinfo('靠,出错了','连接失败!\n请确认 *** 连接以及链接地址正确\n确认后可再次尝试')
       return
   button = tk.Button(window, text="智慧树爆炸按钮", command=start_task)
   canvas.create_window(400,550, width=100, height=60,window=button)
   canvas.pack()    window.mainloop()

哈哈哈,开个小玩笑!

标签:#智慧树刷课脚本

上一篇当前文章已是最后一篇了

下一篇当前文章已是最新一篇了

  • 评论列表

留言评论

网课答案系统上线!

速度get新技能~


点击这里了解详情!   

×

扫码查题

微信号复制成功

打开微信,点击右上角"+"号,添加朋友,粘贴微信号,搜索即可!