美文网首页Python七号
Python 云端学习

Python 云端学习

作者: somenzz | 来源:发表于2018-12-23 21:26 被阅读453次

    由于关注我个人公众号的朋友大部分都是身边的同事,今天特分享一个福利作为感谢,可以自动帮你完成一些网站上的重复点击操作,比如,我用它在一天之内就学完了云端学习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的元素,视角会自动切换到如下图所示的元素代码上

    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 获取源码。

    个人微信公众号

    相关文章

      网友评论

        本文标题:Python 云端学习

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