由于关注我个人公众号的朋友大部分都是身边的同事,今天特分享一个福利作为感谢,可以自动帮你完成一些网站上的重复点击操作,比如,我用它在一天之内就学完了云端学习16个学分的学习任务,可以说是节省时间的利器了。当然了,其他读者朋友如有需求,可以按照下文的方法修改代码来满足自己的需求。
有不少单位每个季度都要求有学习任务,就是指定一个课程网站,自己登陆进去观看相应的视频课程,不能快进,学完后再做课程评估,有的还要求做题目(单选、多选、判断),每学完一节课程会获得相应的学分,学分达到一定的分数才可以结业。有没有感觉像上大学的感觉。
但是问题来了,要求在业余时间学习,不能占用上班时间,其实这还能接受。不能接受的是这其些课程对个人的工作或者发展完全没有用处,或者说就是浪费时间,有过这种体验的朋友肯定知道个中滋味。
不想浪费时间,但又不得不学,怎么办?
-
方法一:老老实实的,按步就班地学习完。可以说,使用这些方法的人在学校那肯定是学霸级别的,执行力度特别到位,只要是学习就不算浪费时间。
-
方法二:点开视频,然后干其他事情,等视频结束,网上找点答案一做完事,大部分人在学校学习时也是这种状态,这种方法也就浪费点时间,其他没什么,也许有些时间就应该浪费。
-
方法三:自己不想做的事情,就花钱让别人做,省时省力。现在淘宝网还真有这样的服务,也是抓住需求赚了一把。这种做事风格在校可能是学渣级的,但这种思维我是很欣赏的,花钱能解决的问题,都不是问题。不过看价格(一个学分2元),我相信他们也是使用爬虫来做的,人力成本不会这么便宜。
-
方法四:做为一个技术宅和 Python 爱好者,怎么能自己动手做一些重复的事情呢,写个 Python 程序来释放你疲劳的右手。
方法四就是今天我要分享给你的内容,感兴趣的不妨撸起袖子试一试,不感兴趣的,我可以帮你搞定,赏一杯咖啡钱就行,_。
本方法所需要的软件包和源码全部打包已放在百度网盘内,公众号后台回复【云端学习】获取下载链接,不需要再额外下载其他软件。
需要具备的知识:
- 会使用 windows 电脑
- 如果要修改源码,请简单学习下 Python 基础和 selenium 库的用法即可,很简单,有问题可以联系我。
原理
你可以理解为它是一个灵活的按键精灵。就是使用 Python 模拟人来点击浏览器中的网页,自动登陆,点击,观看完视频后自动完成课程评估,自动播放下一节视频。当然,有些测试题目的还是需要自己做的,还没那么智能,不过都非常简单,很快就能做完。
对 url 的操作,如发送请求,点击链接,获取数据等等,这就是爬虫技术。爬虫没有那么高深的知识,只要懂 http,https 协议,再会使用一些工具就够了。每个语言其实都有自己的爬虫框架,要了解这些框架的适用场景,找一两个容易上手的就可以了。
本程序主要使用 Python 的浏览器自动化与仿真工具 - selenium,它可以自动化真正的浏览器(Chrome浏览器,火狐浏览器,Opera浏览器,IE浏览器),运行时,你可以看到浏览器的页面上的点击动作,就像有人在点击一样。
这里以 chrome 浏览器为例,因为它可以非常方便的提取页面元素的 xpath。也非常方便调试。
操作步骤
一步一步来,很简单的。
第一步:安装 Python 及 chrome 浏览器
如果电脑上已安装 Python3 和 chrome 浏览器可以跳过本步骤。没有安装的可以通过官网链接 https://www.python.org/ftp/python/3.7.1/python-3.7.1-amd64.exe 下载安装 Python3,这里是 64 位,如果你的电脑系统是 32 位请安装 https://www.python.org/ftp/python/3.7.1/python-3.7.1.exe。安装时注意勾选把 Python 添加到 PATH 环境变量中。其他全部默认即可。
chrome 浏览器的安装包在网络上也很容易找到,怕你找不到好资源或者下载速度太慢,这些安装包我都放在百度网盘里了,省事的可以下载如下图这两个文件安装即可。
Python和Chrome浏览器的安装ChromeInstaller_71.0.3578.98.rar 解压后运行 install.exe 即可安装。
第二步:安装 selenium 及 chromedriver
1、安装 selenium
同时按键盘上的 windows 键和 R 键,输入 cmd 并回车,如下图所示:
image.png
回车后你会看到一个命令窗口,键入 python 并回车,如果有以下图中的显示说明 Python 安装成功,再 >>> 后键入 quit() 退出 Python 解释器环境,然后输入 pip install selenium 即可完成安装,下图的提示表明我已经安装了,不需要再次安装了。
安装selenium
2、保存网盘中的 chromedirvier.exe 到一个位置即可
这是软件已经在网盘里了,是可执行文件,直接使用即可,无需安装,找一个位置放下,可以简单地和源码 e-learning.py 放在一个目录下,源码 e-learning.py 会调用 chromedirvier.exe 来控制 Chrome 浏览器,网盘里的 chromedirver 和网盘里的 chrome 浏览器版本是对应的,如果后面因为版本不一致出现兼容问题,可以去这里下载对应版本的 chromedirver。
http://npm.taobao.org/mirrors/chromedriver/
一些老版本对应如下表所示:
chromedriver版本 | 支持的Chrome版本 |
---|---|
v2.33 | v60-62 |
v2.32 | v59-61 |
v2.31 | v58-60 |
v2.30 | v58-60 |
v2.29 | v56-58 |
v2.28 | v55-57 |
v2.27 | v54-56 |
v2.26 | v53-55 |
v2.25 | v53-55 |
v2.24 | v52-54 |
v2.23 | v51-53 |
v2.22 | v49-52 |
v2.21 | v46-50 |
v2.20 | v43-48 |
v2.19 | v43-47 |
v2.18 | v43-46 |
v2.17 | v42-43 |
v2.13 | v42-45 |
v2.15 | v40-43 |
v2.14 | v39-42 |
v2.13 | v38-41 |
v2.12 | v36-40 |
v2.11 | v36-40 |
v2.10 | v33-36 |
v2.9 | v31-34 |
v2.8 | v30-33 |
v2.7 | v30-33 |
v2.6 | v29-32 |
v2.5 | v29-32 |
v2.4 | v29-32 |
第三步:运行 e-learning.py
运行之前注意先修改 chromedirver.exe 的路径和自己的用户名和密码,如下所示:
# -*- coding: utf-8 -*-
import time
import re
from selenium import webdriver
#设置chromedriver的存放位置
driver = webdriver.Chrome(executable_path=r'E:\GitHub\python\pachong\tools\chromedriver.exe')
driver.get("http://e-learning.jsnx.net")
#防止有人的网络特别慢,每步的间隔均设置 5 秒,以便稳定,如果某步报错了可适当增加延时
time.sleep(5)
##这里改成你的用户名,一般为身份证号
driver.find_element_by_xpath('//*[@id="loginName"]').send_keys('#你的用户名#')
##这里改成你的密码,一般为身份证号
driver.find_element_by_xpath('//*[@id="password"]').send_keys('#你的密码#')
driver.find_element_by_xpath('//*[@id="form-login"]/div/div[3]/input').click()
time.sleep(5)
如何获取xpath
说下这里如何使用 chrome 浏览器来获取 xpath,以网址 http://e-learning.jsnx.net 为例,在 chrome 浏览器中打开后按F12,打开开发人员工具窗口,如下图所示:
如上图所示,先点击鼠标箭头样式的图标,再点击要查看xpath的元素,视角会自动切换到如下图所示的元素代码上
xpath获取方法在html代码上右键单击,会出现 copy 菜单,在 copy 菜单的弹出项中选择 copy xpath 即可。
运行方式: 进入 e-learning.py 所在的目录,SHIFT + 鼠标右键选择 【在此处打开Powershell窗口】 或 【在此处打开命令窗口】,在命令窗口中
输入
python e-learning.py
即可执行本程序来为你自动学习了,在播放的过程中,第一次播放需要启用 chrome 浏览器的 flash player 功能,如下图所示,只需要点击一次就可以了,后面的播放过程中无需人工干预,当然了,题目还是需要自己做一下的,课程评估不需要。
启用flash运行过程中命令窗口的打印截图如下所示:
信息输出为防止有人的网络特别慢,每步的间隔最小设置 5 秒,以便稳定,如果你的网络快,可设置 2 秒,但是几乎不影响看视频的效率。循环观看视频的代码如下所示:
while True:
print("#直接进入学习地图")
driver.get('http://e-learning.jsnx.net/els/html/index.parser.do?id=0007')
time.sleep(5)
print("#进入课程列表")
driver.find_element_by_xpath('//*[@id="trackList"]/ul/li[1]/div[2]/div[3]/a').click()
time.sleep(5)
##查找未学的课程的 id 保存至变量 corses 列表中
regex = re.compile('<a href="#" id="(.*)" title=.*class="innercan goCourseByStudy"')
corses = re.findall(regex,driver.page_source)
if corses == []: break ##说明没有待学的课程,已全部学完,直接退出循环
print("#将学习的课程ID为",corses[0])
xpath = f'//*[@id="{corses[0]}"]'
##循环点击待学习的课程
##注意第一次播放时需要启用一下 Flash player,根据浏览器提示右键点击一下即可启用,只需要处理一次即可。
driver.find_element_by_xpath(xpath).click()
print("开始播放")
handles = driver.window_handles
time.sleep(1)
##切换浏览器标签页
for handle in handles:
if driver.current_window_handle != handle:
driver.switch_to.window(handle)
break
##最低观看60s 后检查是否可以进行课程评估
time.sleep(60)
while True:
#循环判断是否出现[进入下一步】按钮,如有说明视频已经看完,可以进行课程评估
try:
driver.find_element_by_xpath('//*[@id="goNextStep"]/a').click()
time.sleep(5)
break
except:
pass
time.sleep(30)
try:
##开始进行课程评估
time.sleep(2)
driver.find_element_by_xpath(u"(.//*[normalize-space(text()) and normalize-space(.)='★'])[3]/following::input[1]").click()
time.sleep(2)
driver.find_element_by_xpath("(.//*[normalize-space(text()) and normalize-space(.)='B'])[1]/following::span[1]").click()
time.sleep(2)
driver.find_element_by_xpath("(.//*[normalize-space(text()) and normalize-space(.)='B'])[2]/following::span[1]").click()
time.sleep(2)
driver.find_element_by_xpath("(.//*[normalize-space(text()) and normalize-space(.)='B'])[3]/following::span[1]").click()
time.sleep(2)
driver.find_element_by_xpath("(.//*[normalize-space(text()) and normalize-space(.)='B'])[4]/following::span[1]").click()
time.sleep(2)
driver.find_element_by_id("courseEvaluateSubmit").click()
time.sleep(2)
driver.find_element_by_link_text(u"确定").click()
time.sleep(2)
driver.find_element_by_link_text(u"查看结果").click()
time.sleep(2)
print("已提交课程评估")
except:
pass
##切换浏览器标签页
for handle in handles:
if driver.current_window_handle != handle:
driver.switch_to.window(handle)
break
##退出浏览器
driver.quit()
注释已经非常详细了,欢迎网盘下载 e-learning.py 试用。
(完)
关注公众号 somenzz 获取源码。
个人微信公众号
网友评论