zoukankan      html  css  js  c++  java
  • 用Python来自动刷智慧树网站的网课

    学校最近让看什么网课,智慧树网站的,太无聊了,写个脚本刷下,这里是用Python+selenium实现的,也可以用js脚本,更简单,但是我这里刚好最近在学python,就顺便练习下,说下有几个点,

    1.这里为了练习顺便把登陆功能也做了,注意有一个自动联想元素,需要定位并点击它

    2.有两个弹窗,只解决了一个,另一个不知为什么定位不到,所以这里需要手动点击一次,

    3.视频中间会有问题弹窗出现,不处理弹窗不会继续播放,这里使用循环不断判断能否定位到弹窗,定位到了就对弹窗进行处理,获取网页源代码并定位问题的name,之后定位并随便选择一个答案作答,

    4.这里设置了1.5倍速播放,注意需要先控制鼠标移动到播放窗口处,才能定位到速度按钮

    5.其实也可以直接启动浏览器之后,自己进行登录操作,然后运行指定代码,

    6.注意需要更改代码中的学校,学号,密码为自己的信息

    网站的url:     http://study.zhihuishu.com/learning/videoList;       具体到个人可能会有一些其他的参数,不过不影响

    欢迎交流。。

    具体代码如下:

    from selenium import webdriver
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.common.exceptions import TimeoutException, NoSuchFrameException
    import time
    from selenium.webdriver.common.action_chains import ActionChains
    from bs4 import BeautifulSoup
    
    if __name__ == '__main__':
        print('stART')
        url = 'http://study.zhihuishu.com/learning/videoList;jsessionid=075B1012EC3EFA6EB79A19B1FF96EA44;jsessionid=709212495C7D26BCC1F884A2D4EEC2D9?recruitAndCourseId=4b585c5f4252415846425e5150'
        browser = webdriver.Chrome()
        wait = WebDriverWait(browser, 10)
        browser.get(url)
        wait.until(EC.element_to_be_clickable((By.LINK_TEXT, '学号'))).click()
        wait.until(EC.presence_of_element_located((By.ID, 'quickSearch'))).send_keys('学校名字')
        wait.until(EC.presence_of_element_located((By.ID, 'clCode'))).send_keys('学号')
        wait.until(EC.presence_of_element_located((By.ID, 'clPassword'))).send_keys('密码')
        wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#schoolListCode > li:nth-child(2)'))).click()
        wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'wall-sub-btn'))).click()
        wait.until(EC.presence_of_element_located((By.LINK_TEXT, '确定'))).click()
        # 这块手动点下我已统一
        flag = 0
        i = 1
        k = 1
        time.sleep(5)
        while True:
            if k == 1:
                print("播放地", i, '个视频')
                a = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'videoArea')))
                ActionChains(browser).move_to_element(a).perform()
                speed = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#vjs_mediaplayer > div.controlsBar > div.speedBox')))
                speed.click()
                speed_15 = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'speedTab15')))
                speed_15.click()
                k = 0
            while True:
                try:
                    a = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'videoArea')))
                    ActionChains(browser).move_to_element(a).perform()
                    isFinsh = (browser.find_element_by_class_name('passTime').get_attribute('style') == ' 100%;')
                    if isFinsh:
                        break
                    browser.switch_to.frame('tmDialog_iframe')
                    print("弹窗出现")
                    flag = 1
                    break
                except NoSuchFrameException:
                    pass
            if flag == 1:  # 关闭弹窗
                print("关闭弹窗")
                soup = BeautifulSoup(browser.page_source)
                name = soup.find(class_='answerOption').input.attrs['name']
                a = wait.until(EC.presence_of_element_located((By.NAME, name)))
                a.click()
                #browser.find_element_by_name('question561294').click()
                browser.switch_to.default_content()
                browser.find_element_by_link_text('关闭').click()
                print("关闭成功")
                flag = 0
            else:  # 播放下一个视频
                print("播放完了第", i, '个视频')
                i += 1
                browser.find_element_by_link_text('下一节').click()
                isFinsh = False
                k = 1
                time.sleep(2)
  • 相关阅读:
    selenium 设置等待时间
    mac下配置python+selenium+chrome环境
    自定义filter
    urllib登录的cookie复制到headers,模拟登录人人网
    urllib中的保存cookie使用,运用cookiejar来模拟登录人人网
    urllib中的cookie使用,四种方法
    urllib中的https使用,导入ssl模块
    urllib判断重定向
    urllib中的down,下载百度图片为例
    urllib中的本地代理设置
  • 原文地址:https://www.cnblogs.com/eenio/p/10852828.html
Copyright © 2011-2022 走看看