i春秋作家:tllm

最近刚刚开学,学校总是有很多让人无语的课要修,还不能不修。然后我想写一个自动修课的脚本。大佬们不要笑我 是边面向百度学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.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'})

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()

大家有任何问题可以提问,更多文章可到i春秋论坛阅读哟~

python大学课程-利用python完成大学刷课(从0到完成的思路)相关推荐

  1. 【Python例】利用 python 进行用户画像词云图的生成 --- wordcloud

    [Python例]利用 python 进行用户画像词云图的生成 - wordcloud 本文主要用于记录,并使用 python 脚本进行用户画像的词云图的生成. 前言 对于词云图来说,是一个用户画像数 ...

  2. 【Python例】利用 python 进行图片文字信息的提取 --- OCR-EasyOCR

    [Python例]利用 python 进行图片文字信息的提取 - OCR-EasyOCR 本文主要用于记录,并使用 python 脚本进行图片文字信息的生成. 什么是 OCR? OCR OCR(Opt ...

  3. boxplot用法 python,[Python画图笔记]利用Python画箱型图boxplot

    [Python画图笔记]利用Python画箱型图boxplot [Python画图笔记]利用Python画箱型图boxplot 最近在学习使用Python画图,想用subplot画两幅箱型图,分别用来 ...

  4. 在“双减”政策下,利用《陈老师排课12.0》排主课、早自习、课后服务三种不同时段的综合课表

    陈老师排课12.0是排课11.0的升级版.可以对不同时段分别排课,最后把几张课表综合在一起.排课12.0把VB程序与EXCEL课表打印系统完美结合,先对全校原始课表进行课时智能分布优化,按<排课 ...

  5. python推荐_利用Python构建一个简单的推荐系统

    原标题:利用Python构建一个简单的推荐系统 摘要:快利用python构建一个属于你自己的推荐系统吧,手把手教学,够简单够酷炫.在此之前读者需要对pandas和numpy等数据分析包有所了解. 什么 ...

  6. python excel绘图-利用python在excel中画图的实现方法

    一.前言 以前大学时候,学EXCEL看到N多大神利用excel画图,觉得很不可思议.今个学了一个来月python,膨胀了就想用excel画图.当然,其实用画图这个词不甚严谨,实际上是利用opencv遍 ...

  7. python编程课程-深圳Python编程课程

    深圳Python编程课程 来源:教育联展网 编辑:粉色de皮卡丘 发布时间:2019-09-04 人工智能Python培训 到北大青鸟学Python 技能提升高薪就业 快速咨询 学习Python有哪些 ...

  8. python免费课程讲解-Python快速入门免费课程

    天善学院介绍:天善学院是国内最大的BI 产品学习平台,致力于推动国内BI.数据分析.大数据领域的人员学习和发展,课程涵盖国际国内知名BI可视化产品,cognos.tableau.qv等等,课程量丰富. ...

  9. python在线课程价格-python课程价格

    python课程价格根据所报读的班级不同,价格从一万到两万四不等,详情请咨询客服.随着近年Python的持续走热,越来越多的公司开始使用Python编程语言.具体情况大家可以看一下各个招聘平台的具体数 ...

最新文章

  1. AppBox升级进行时 - 拥抱Entity Framework的Code First开发模式
  2. less新手入门(四)—— Mixin Guards
  3. SpringBoot集成多数据源
  4. vue项目中使用mock(一)
  5. 使用SharpZipLib.dll压缩zip
  6. php+静态变量的初始值,php 静态变量的初始化
  7. 基于边缘计算的森林火警监测系统
  8. 引入LeakCanary到项目
  9. Elasticsearch SQL插件
  10. 开源非英文关键词编程语言
  11. 软件工程 2016.7.3 日报
  12. 新手坐高铁怎么找车厢_坐动车怎么找车厢
  13. Hello Python(十七)——Python扩展模块开发
  14. LOCAL_CERTIFICATE作用
  15. 在html上运行asp,ASP在网页设计的作用
  16. [视频访谈翻译]David Kaneda访谈:移动HTML5设计和开发
  17. Tebleau-四象限图
  18. pc端网页实现微信扫码登录
  19. C语言feof()函数的使用
  20. 置业顾问、权证人员使用说明

热门文章

  1. python3 aes 解密
  2. FileChannel
  3. Python-Day3-数据类型
  4. return、break、continue区别以及作用范围
  5. NodeAsp——像开发NodeJS应用一样玩转ASP
  6. 页面上水平飞舞的图片
  7. 8.17——继续熟悉linux的命令行
  8. 在DLL编程中调用模版类时出现的类似class“XXX”需要有 dll 接口由 class“XXX”的客户端使用的warning的解决方案...
  9. [SimplePlayer] 4. 从视频文件中提取音频
  10. java基础 4 继承(1)访问权限与作用域