一.前提准备(python环境配置及火狐驱动配置)
1.火狐浏览器驱动下载
驱动下载网址:http:// https://github.com/mozilla/geckodriver/releases/
把火狐更新到最新版本,然后下载对应版本的驱动(记得选win版本)
然后把下载并解压完成的驱动软件复制到火狐的安装文件夹下(注:这里标注出来的是正确的驱动位置,和Firefox.exe在同一文件夹下)
已经快完成了,咱们现在来配置环境变量
按照图片介绍配置好环境变量
配置完成后,进入cmd(win+R,输入cmd), 再输入一下驱动的名字,如果返回了端口名称,则是配置成功,咱们可以进入下一步了
2.火狐selenium插件下载
打开Firefox,点击右上角菜单->扩展和主题->搜索->输入selenium ide
下载第一个,并安装
二.pycharm配置selenium
请提前配置python环境变量,并下载pycharm社区版(免费),这部分我就不去赘述了
新建一个python项目,再点击Ctrl+Alt+S,进入设置页面
完成selenium包下载,下一步就可以进入代码部分了 (^_^)
三.代码部分
先来看代码,写的比较粗糙,直接在新建项目下在创建一个.py文件复制进去能跑就行
注释我尽力去写的清晰,如果有bug欢迎纠错留言(^_^)
注:输入账号密码后登录的人工验证图是需要用户自己解决的,才疏学浅真的无法解决这个
# coding=utf-8
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
import time
######################################################
# 导包,初始化浏览器智慧树网址 #
# @代码封装:通用中文名 #
# @想要解放双手轻松刷智慧树网课吗,想要富裕出大把时间决战高数吗?#
# @这款 Dr.通用 的自动化程序绝对不会让你失望!(目前仅支持火狐)#
########################################################
class auto_Course:
def login(self):
time.sleep(3)
print("hello,欢迎使用本程序 :P")
name = input("请输入用户名:")
code = input("请输入密码:")
password = driver.find_element(By.ID, "lPassword")
password.send_keys(code)
myname = driver.find_element(By.ID, "lUsername")
myname.send_keys(name)
time.sleep(1)
driver.find_element(By.CLASS_NAME, "wall-sub-btn").click()
# 定义用户和密码,并输入,点击登录键
WebDriverWait(driver,20).until(ec.presence_of_element_located((By.CLASS_NAME, 'process')))
#等待用户进行验证码验证(手动)
def panduan(self, ell):
flag = True
try:
ell.find_element(By.CLASS_NAME, "file-rate").find_element(By.CSS_SELECTOR, '[class="iconfont zhihuishu-wancheng"]')
return flag
except:
flag = False
return flag
#这个函数用于检测页面是否存在某元素,并返回布尔值
def chooseCourse(self):
time.sleep(2)
courses = driver.find_elements(By.CLASS_NAME,"process")
iff = 0
#获取全部大标题信息作为库,并定义判断值,赋值为0
for var1 in courses:
persent = var1.find_element(By.CLASS_NAME, "processNum").get_attribute('textContent')
#遍历大标题,并获取学习进度
if persent != '100%':
#当获取到未完成的大标题时停止,并点击进入
iff = 1
#将判断值赋值1
var1.click()
#如果大标题未学习满,则点击学习
WebDriverWait(driver, 8).until(ec.presence_of_element_located((By.CLASS_NAME, 'file-name')))
eemmaann = driver.find_element(By.CLASS_NAME,"course-name").find_element(By.CLASS_NAME,"name").get_attribute('textContent')
print("------------------------------检测到未学习完成的专题-----------------------")
print("专题名称 : "+eemmaann)
files = driver.find_elements(By.CLASS_NAME, "file-item")
#待小标题出现后获取所有的小标题
print("请等待,正在遍历未学习完成的课程......")
for o in files:
for handle in driver.window_handles:
driver.switch_to.window(handle)
flag= self.panduan(o)
#判断已经学习完成的课程,不点击(节省时间)
if flag==False:
nnaammee = o.find_element(By.CLASS_NAME, "file-name").get_attribute('textContent')
print("开始学习" + nnaammee)
o.click()
#点击课程,打开新窗口
for handle in driver.window_handles:
driver.switch_to.window(handle)
# 遍历句柄,切换主要界面
WebDriverWait(driver, 8).until(
ec.presence_of_element_located((By.XPATH, '//*[@id="vjs_mediaPlayer"]')))
driver.find_element(By.XPATH, '//*[@id="vjs_mediaPlayer"]').click()
time.sleep(10)
# 找到视频主界面,点击播放
mytime = driver.find_element(By.CLASS_NAME, "currentTime").get_attribute('textContent')
ittime = driver.find_element(By.CLASS_NAME, "duration").get_attribute('textContent')
# 获取目前时间和总时长
while mytime != ittime:
mytime = driver.find_element(By.CLASS_NAME, "currentTime").get_attribute('textContent')
ittime = driver.find_element(By.CLASS_NAME, "duration").get_attribute('textContent')
time.sleep(10)
driver.close()
#每十秒更新一次当前时间,若视频播放完成则关闭该页面
driver.back()
driver.refresh()
WebDriverWait(driver, 20).until(ec.presence_of_element_located((By.CLASS_NAME, 'courseName')))
self.chooseCourse()
if iff == 0:
print("-----------------------------------我是可爱的分界线-----------------------")
print("已经自动学习完所有课程啦,稍后程序将自动退出,期待您的下次使用 :D ")
driver.quit()
exit()
#进程部分
def erro(self):
print("遇到错误,退出程序,如有疑问请联系开发者:CSDN @通用中文名")
driver.quit()
exit()
def run(self):
self.login()
self.chooseCourse()
driver = webdriver.Firefox()
driver.get('https://onlineweb.zhihuishu.com/onlinestuh5')
# 设置初始网页,配置浏览器
try:
auto_Course().run()
except Exception:
auto_Course().erro()
程序设计的基本原理,点击进入智慧树页面后,先用find_elements遍历所有没有学完的大标题,然后再逐个点击;后遍历所有没学习完成的小标题(利用小标题学习完成后会显示一个对勾图标加以区分),再点击学习。文章来源:https://uudwc.com/A/BvPe4
四.结语
使用愉快,如遇到报错请留言(不常在线,但看到反馈会第一时间排查问题) (^_^)文章来源地址https://uudwc.com/A/BvPe4