美文网首页python热爱者Python新世界
利用python完成大学刷课(从0到完成的思路)

利用python完成大学刷课(从0到完成的思路)

作者: 48e0a32026ae | 来源:发表于2018-10-22 16:46 被阅读15次

利用python selenium模块实现全自动化大学刷课

如果你感觉学不会?莫慌,小编推荐大家加入群,

前面548中间377后面875,群里有志同道合的小伙伴,

互帮互助,还可以拿到许多视频教程!

最近刚刚开学,学校总是有很多让人无语的课要修,还不能不修。然后我想写一个自动修课的脚本。大佬们不要笑我 是边面向百度学selenium边写脚本的 然后踩了一些坑 记录一下

0x01:

首先分析一下它是怎么验证你看完这个课的。

当学习完成时会发出这个请求

然后看看这几个请求的数据都是在前端哪里生成的

一番寻找就看到了是wx.js下的function finishWxCourse() 。控制台执行 finishWxCourse() 果然会发起完成修课的请求

0x02:

然后剩下就是脚本的思路 首先要获取课程的链接 然后打开以后执行js finishWxCourse() 后来发现requests不是很好的能执行js 然后我就听从了几个师傅的意见用selenium...所以是边学边写的 遇到了几个小坑记一记

安装不表 网上很多教程 chromedriver装在环境变量里面就好了 比如python的环境变量 如果遇到问题可以留言评论

先说一下 代码最终的整体思路是 打开网站----设置cookie----然后通过点击打开所有的隐藏元素-----定位点击----后退---------------点击打开所有的隐藏元素-------定位点击----------后退..然后重复之前的步骤

这是简单的启动浏览器和发起请求

driver = webdriver.Chrome("C:/Python27/chromedriver.exe")

driver.get("http://wb.mycourse.cn/")

删除所有的cookie并设置cookie。我是手动登陆然后再添加 有一个要记住的就是先要请求一次网页 才能设置cookie 再请求网页

driver.add_cookie({'name':'JSESSIONID','value':'93BEC0FDEF428F98DA1F69A6B3C2BF88'}) #已经过期的了 师傅们

driver.add_cookie({'name':'acw_tc','value':'7b39758715392684428742395e7ed4b94ed4e9616cb11d4b9df9e244ec7573'})

driver.add_cookie({'name':'SERVERID','value':'02cc313090e3650844ab417ac43bf774|1539357767|1539357719'})

driver.get("http://wb.mycourse.cn/svnweiban/student/study_studyAndTest.action")

接着就是定位元素了 首先要看到我们要点击的课程链接

看到class属性 有一个坑就是这里多个class属性 不能直接多个class一起定位 不然会找到 如果全部一起定位要用css寻找并且用.来链接 然后我这里用的是 courseLink定位 这个名字也很明显是做什么的。然后我也发现是98个课程都能定位到 前面几个class能定位到1000多个

link2s = driver.find_elements_by_class_name("courseLink")

我原本就很开心的以为差不多做完了准备写出一个这样子的代码

for i in range(99):

link2s = driver.find_elements_by_class_name("courseText")

link2s[i].click()

driver.execute_script("finishWxCourse()")

但是结果发现无法获取到元素 什么鬼 然后一直报错···苦苦百度以后发现···原来是没有展开元素 是diplay:none。 隐藏了 然后我百度以后找到的方法一直是 通过执行js把none改为block结果发现不好定位啊

class属性都是不唯一的 然后很蛋疼 后来师傅推荐说通过xpath定位 可是好多个 不想嫌弃麻烦 洗了个澡回来以后发现可以通过定位元素 然后点击元素 来实现自动展开列表

通过 前面截图的cursorPointer 能够成功定位20多个地方出来 但是前面几个定位是什么首页 搜索 不是我们想要的 问题不大。我们删除这几个定位就好了

blockclass = driver.find_elements_by_class_name("cursorPointer")

del blockclass[0]

del blockclass[0]

del blockclass[0]

for blockc in blockclass:

blockc.click()

删除几个定位就好了

然后现在调试以后 集合代码跑了一次发现了几个问题,第一个就是 当

driver.execute_script("finishWxCourse()") #执行js代码

执行代码以后,会alert一个窗口出来说 完成了课程。然后就会导致selenium不能点后退 面向百度编程以后

dig_alert = driver.switch_to.alert #搜索弹窗

dig_alert.accept() #点击确定

接着就是最后一个坑了driver.back()以后蛋疼了 back以后 之前定位的会失效···所以只能每回退一次重新定位 还有要注意的就是在一些关键地方之前要time sleep一秒 不然还没请求完成出来就执行下一步了 会导致报错 最后就大功告成了

源码:

#coding=utf-8

from selenium import webdriver

import time

def login():

driver = webdriver.Chrome("C:/Python27/chromedriver.exe")

driver.get("http://wb.mycourse.cn/")

driver.delete_all_cookies()

driver.add_cookie({'name':'JSESSIONID','value':'93BEC0FDEF428F98DA1F69A6B3C2BF88'}) #cookie都过期了的 不用试

driver.add_cookie({'name':'acw_tc','value':'7b39758715392684428742395e7ed4b94ed4e9616cb11d4b9df9e244ec7573'})

driver.add_cookie({'name':'SERVERID','value':'02cc313090e3650844ab417ac43bf774|1539357767|1539357719'})

driver.get("http://wb.mycourse.cn/svnweiban/student/study_studyAndTest.action")

blockclass = driver.find_elements_by_class_name("cursorPointer")

del blockclass[0]

del blockclass[0]

del blockclass[0]

for blockc in blockclass:

blockc.click()

for i in range(99):

link2s = driver.find_elements_by_class_name("courseText")

link2s.click()

driver.execute_script("finishWxCourse()")

time.sleep(1)

dig_alert = driver.switch_to.alert

dig_alert.accept()

driver.back()

time.sleep(1)

blockclass = driver.find_elements_by_class_name("cursorPointer")

del blockclass[0]

del blockclass[0]

del blockclass[0]

for blockc in blockclass:

blockc.click()

time.sleep(0.5)

login()

相关文章

  • 利用python完成大学刷课(从0到完成的思路)

    利用python selenium模块实现全自动化大学刷课 如果你感觉学不会?莫慌,小编推荐大家加入群, 前面54...

  • 完成了次从0到1

    手上有项工作,比较繁琐,就我一个人,感觉工作像绣花,要有高度的专注并忍受极度枯燥。 特别是面对被污染的数据的时候,...

  • 移动端交互自查清单

    0. 思路: 1)明确用户在什么场景下完成什么操作。 2)从框架流程到内容细节,如:框架导航,流程,布局,转场,反...

  • 从完成到完美

    不管是读书还是写东西,先完成既定的目标,再去不断的完善。加入007有不少时间了,不知道什么时候开始不再关注班级的群...

  • 从完成到完美

    教练班课程结束了,有一种意犹未尽的感觉。总想着下一阶段会是怎样的课程,刘信老师会从哪个方面带领大家?可见,从小白课...

  • 如何从0到1完成 app 设计

    作为互联网行业的设计师,不仅仅需要完成用户界面(User Interface,简称 UI)的视觉设计,还应该具备产...

  • 新事业,完成从0到1的突破

    都说万事开头难,经历了三个月的努力,终于签下了一套8年租期的长租约房子,今天非常激动和值得纪念,不是说赚了多少钱,...

  • 2019-01-20 数据蛙第二周学习总结 Python入门 B

    本周完成:课程中视频及《Python从入门到实践》2-6章,Python练习完成5道。 练习题进度不足,MySQL...

  • 做个钉钉小闹钟

    0x00 前言 大致思路如下: 利用钉钉的webhook,结合python代码,实现发消息的功能。 利用windo...

  • Binary Tree Level Order Traversa

    解題思路 : 就是基本的 BFS 思路 利用 queue 來完成 level order traversal 然後...

网友评论

    本文标题:利用python完成大学刷课(从0到完成的思路)

    本文链接:https://www.haomeiwen.com/subject/qzvgzftx.html