python刷课代码_利⽤python完成⼤学刷课(从0到完成的思
路)
软件测试方法论利⽤python selenium模块实现全⾃动化⼤学刷课
最近刚刚开学,学校总是有很多让⼈⽆语的课要修,还不能不修。然后我想写⼀个⾃动修课的脚本。⼤佬们不要笑我 是边⾯向百度学selenium边写脚本的 然后踩了⼀些坑 记录⼀下
先放最终效果视频
ruby语言能做什么0x01:
⾸先分析⼀下它是怎么验证你看完这个课的。
当学习完成时会发出这个请求
然后看看这⼏个请求的数据都是在前端哪⾥⽣成的
⼀番寻就看到了是wx.js下的function finishWxCourse()  。控制台执⾏ finishWxCourse() 果然会发起完成修课的请求
0x02:
然后剩下就是脚本的思路 ⾸先要获取课程的链接 然后打开以后执⾏js  finishWxCourse() 后来发现requests不是很好的能执⾏js 然后我
就听从了⼏个师傅的意见⽤所以是边学边写的 遇到了⼏个⼩坑记⼀记
安装不表 ⽹上很多教程 chromedriver装在环境变量⾥⾯就好了 ⽐如python的环境变量 如果遇到问题可以留⾔评论
先说⼀下 代码最终的整体思路是 打开⽹站----设置cookie----然后通过点击打开所有的隐藏元素-----定位点击----后退---------------点击打开所有的隐藏元素-------定位点击----------后退..然后重复之前的步骤
这是简单的启动浏览器和发起请求
driver = webdriver.Chrome("C:/")
<("wb.mycourse/")
删除所有的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'})
<("wb.mycourse/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")
datetime模块包括两个常量
python基础代码大全黑客link2s[i].click()
但是结果发现⽆法获取到元素 什么⿁ 然后⼀直报错···苦苦百度以后发现···原来是 没有展开元素 是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()
删除⼏个定位就好了
然后现在调试以后 集合代码跑了⼀次发现了⼏个问题,第⼀个就是 当
执⾏代码以后,会alert⼀个窗⼝出来说 完成了课程。然后就会导致selenium不能点后退 ⾯向百度编程以后
dig_alert = driver.switch_to.alert #搜索弹窗
dig_alert.accept() #点击确定
接着就是最后⼀个坑了 driver.back() 以后蛋疼了 back以后 之前定位的会失效···所以只能每回退⼀次重新定位  还有要注意的就是在⼀些关键地⽅之前要time sleep⼀秒 不然还没请求完成出来就执⾏下⼀步 了 会导致报错 最后就⼤功告成了

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。