打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
python网课自动刷课程序

python的强大之处就在于有许多已经写好的功能库提供,这些库强大且易用,对于写一些有特定功能的小程序十分方便。

现在就用pyhton的selenium+谷歌游览器写一个可以自动刷课的程序,以智慧树上的网课为例。

原理说明:selenium 是一套完整的web应用程序测试系统,可以模拟真实游览器,支持多种游览器。简单来说就是可以定位到html元素,比如按钮,输入框之类的,然后模拟点击,模拟输入等从而实现自动化效果。selenium难点在于定位元素。

 selenium的一些基本用法:

https://blog.csdn.net/weixin_36279318/article/details/79475388

 

一 .开始之前准备

1.安装selenium:在cmd窗口输入:pip isntaller selenium

2.下载谷歌游览器的驱动chromedriver:https://pan.baidu.com/s/1_wopkNwvmKvqLlNxY_EagQ  (7yxk)

3.安装一个谷歌游览器,最好是最新版的

二.分析网站

要定位元素就要分析网站的一些元素的源代码是如何写的。

1.智慧树的登陆页面

2.用谷歌游览器的审查元素功能查看元素的源代码

按右键选择审查或按F12,得到如下的页面

可以看到输入手机号那一个输入框有一个id选择器,这样就可以根据id选择器的名字定位到这个元素。

其它元素也可以用同样的方法定位元素,然后根据具体情况选择不同的定位方式。

 

 

3.写代码

  1 from selenium import webdriver
  2 
  3 import time
  4 import threading
  5 
  6 browser=webdriver.Chrome()
  7 #请求登陆页面
  8 browser.get(\'https://passport.zhihuishu.com/login?service=http://online.zhihuishu.com/onlineSchool/\')
  9 
 10 #登陆
 11 def login(number,password):
 12     phone_number=browser.find_element_by_id(\'lUsername\')#通过id定位,手机号码
 13     pwd=browser.find_element_by_id(\'lPassword\')#密码
 14     login_btn=browser.find_element_by_class_name(\'wall-sub-btn\')#登陆按钮
 15 
 16     phone_number.send_keys(number)#输入手机号码
 17     pwd.send_keys(password)#输入密码
 18     login_btn.click()#点击登陆按钮
 19 
 20 #转到播放视频页面
 21 def to_course(key):
 22 
 23     time.sleep(5)
 24     current=browser.current_window_handle#当前页面的句柄
 25     key=browser.find_element_by_partial_link_text(key)#找到课程
 26     key.click()#跳转到播放视频页面
 27     time.sleep(1)#等待页面加载
 28     #因为跳转到新的页面,所以browser要切换到新的页面操作
 29     handles=browser.window_handles
 30     for handle in handles:
 31         if handle!=current:
 32             browser.switch_to.window(handle)
 33     
 34     time.sleep(10)
 35     try:
 36         video=browser.find_element_by_id(\'mediaplayer\')#定位视频窗口
 37         video.click()#点击播放
 38     except:
 39         pass
 40   
 41 
 42 
 43 #判断是否有答题窗口弹出
 44 def is_exist():
 45     while True:
 46         try:
 47             browser.switch_to.default_content()
 48             browser.switch_to.frame(\'tmDialog_iframe\')#答题窗口在另一个frame里面,要切换
 49             box=browser.find_elements_by_class_name(\'answerOption\')#答题列表
 50             radio=box[0].find_element_by_tag_name(\'input\')#找到第一个选项
 51             radio.click()#选择
 52             browser.switch_to.default_content()
 53             browser.find_element_by_link_text(\'关闭\').click()#关闭答题窗口
 54         except:
 55             browser.switch_to.parent_frame()#没有弹出,切换回本来的frame
 56         time.sleep(5)
 57 
 58 #判断当前视频是否结束
 59 def is_end():
 60     while True:
 61         try:
 62             video=browser.find_element_by_id(\'mediaplayer\')#定位视频窗口
 63             #获取当前播放的进度
 64             current_time=video.find_element_by_class_name(\'currentTime\').get_attribute(\'textContent\')
 65             #该视频的总时间
 66             total_time=video.find_element_by_class_name(\'duration\').get_attribute(\'textContent\')
 67             print(current_time,total_time)
 68             if current_time==total_time:
 69                 #当前视频播放结束,点击下一节
 70                 js="document.ElementById(\'nextBtn\').click()"#js脚本
 71                 browser.execute_script(js)
 72                 
 73             time.sleep(10)#10秒检测一次
 74         except:
 75             current_time=\'00:00\'
 76             total_time=\'00:01\'
 77       
 78             
 79         
 80 if __name__==\'__main__\':
 81     
 82     \'\'\'
 83     number=\'\'#手机号码
 84     password=\'\'#密码
 85     key=\'\'#课程名称,可以部分名字
 86           
 87     \'\'\'
 88     login(number,password)
 89     to_course(key)
 90     #开两个线程
 91     t1=threading.Thread(target=is_exist)
 92     t2=threading.Thread(target=is_end)
 93     t2.start()
 94     time.sleep(3)
 95     t1.start()
 96     t2.join()
 97     t1.join()
 98 
 99 
100 
101     

 登陆过程:

 

-------------

这个程序只是做一个简单的演示,并没有做到很全面,但也可以用的。

 

selenium定位不到元素时会报错,要处理好,否则程序就没用了。元素定位最好使用WebDriverWait的方式,加上异常控制。

网站是会变化的,分析好网站操作基本的过程,基本没有问题了。

selenium定位不到元素有以下几种情况

1.通过class定位时,有时定位不到

2.页面没有加载出来,元素无法定位

3.元素不可见,无法定位

4.元素被其它元素遮挡了

5.方法用错了

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
天** | 使用selenium做数据采集
UI自动化测试之selenium工具(浏览器窗口的切换)
【Selenium02篇】python+selenium实现Web自动化:鼠标操作和键盘操作!
selenium与谷歌无头浏览器的应用
使用Selenium WebDriver,Python和Chrome编写您的第一个Web测试
第69天:Selenium详解
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服