使用selenium库完成动点击下一页,点击视频操作等过程,
如果你非要说这是XX,那我也不过多辩解,毕竟批评不自由,赞美无意义
。
本案例仅是技术演示,所以会隐去相关网址等,读者可以重点查看这里使用的selenium技术点即可。另外本版本为V01版本,所以仅仅是可用,很多内容都未完善。
import time
from selenium import webdriver # 包
from selenium.webdriver import ActionChains # 模拟鼠标操作点击 下拉
from selenium.webdriver.common.keys import Keys # 键盘按键操作\
from selenium.webdriver.chrome.options import Options # 浏览器配置
定义一个init函数,在init函数内完成初始化浏览器驱动的任务,并实现浏览器全屏等设置,返回值为一个初始化后的浏览器驱动。
# 初始化
def init():
# 实现无可视化界面得操作
chrome_options = Options()
# chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
# 设置chrome_options=chrome_options即可实现无界面
driver = webdriver.Chrome(chrome_options=chrome_options, executable_path='./chromedriver.exe')
# 把浏览器实现全屏
driver.maximize_window()
# 返回driver
return driver
查看登录页,页面如下:
可以看见,登录页包含用户名,密码,验证码等几个部分需要输入,进入浏览器开发者工具,查看对应的css选择器。
通过浏览器选择该元素右键复制对应css选择器,分别如下:
.UserName
.Password
.code > input:nth-child(3)
这里的验证码需要识别,我们可以设置为手动输入。 实现代码如下:
# 初始化网址 用户名和 密码
url = 'XXX'
username = 'XXX'
wd = 'XXX'
driver = init() # 初始化浏览器驱动
driver.get(url) # 调用浏览器打开url
driver.implicitly_wait(3) # 等待3s,以完成页面渲染完成
# 定位到用户名 .UserName
username_tag = driver.find_element_by_css_selector(".UserName")
username_tag.send_keys(username) # 输入用户名
# 定位到密码 .Password
password_tag = driver.find_element_by_css_selector(".Password")
password_tag.send_keys(wd) # 输入密码
# .code > input:nth-child(3)
code_tag = driver.find_element_by_css_selector(".code > input:nth-child(3)")
code_input = input("请输入验证码")
code_tag.send_keys(code_input) # 输入验证码 这里为手动输入,更新后会使用机器打码
登录按钮分析:
对应的xpath路径为
/html/body/form/div[2]/div[1]/div[4]/input
选择登录元素,并回车或左键单击
# 获取登录按钮
submit_tag = driver.find_element_by_xpath("/html/body/form/div[2]/div[1]/div[4]/input")
# 模拟回车操作
submit_tag.send_keys(Keys.ENTER)
# 等待5s
time.sleep(5)
driver.implicitly_wait(10)
点击登录后,会跳转到个人首页。
登录后,跳转到个人首页:
默认是学习为当前标签页,我们需要点击当前页面中对应的课程,打开开发者工具,
复制对应的css选择器,并选择该课程元素:
# 对应的css选择器如下:
# div.in-c-el:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > a:nth-child(1) > img:nth-child(1)
class_01_css_selector = "div.in-c-el:nth-child(6) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > a:nth-child(1) > img:nth-child(1)"
class_01 = driver.find_element_by_css_selector(class_01_css_selector)
# 加载鼠标模拟操作
action = ActionChains(driver)
# 模拟鼠标左键单击 并执行
action.click(class_01).perform()
点击课程后,会弹出一个新的页面–课程页面
注意课程页面时弹出的页面,需要手动切换selenium的当前页面。 进入课程页面后,查看页面信息,有一个继续学习的按钮,点击继续学习的按钮,可以进入到视频播放页面。
实现步骤为:
切换当前页面 查看
继续学习
元素的css选择器,并选择该元素:
# 跳转到视频播放窗口
# 1. 获取打开的所有窗口
wins = driver.window_handles
print(wins) # 查看所有窗口
# 打印当前窗口的句柄
print(driver.current_window_handle)
# 2. 切换语句 切换到你想操作元素的窗口 进入新的html页面
wins[-1]
driver.switch_to.window(wins[-1])
# 3. 在新的页面中,找元素并操作
# .ml12 继续学习按钮
play_01 = driver.find_element_by_css_selector(".ml12")
# 单击继续学习按钮
action = ActionChains(driver)
action.click(play_01).perform()
点击继续学习后,会跳到到视频播放页
进入到视频播放页后,点击视频播放按钮,即可播放视频
查看css选择器,选择播放按钮元素,并左键单击。
# .vjs-big-play-button 播放按钮
play_button = driver.find_element_by_css_selector(".vjs-big-play-button")
action = ActionChains(driver)
action.click(play_button).perform()
视频播放页还有下一集按钮,如下:
通过查看浏览器开发者工具,可以选择下一集按钮,完成当前视频播放完毕,播放下一集的功能。 需要注意的是,需要再切换下一集后,等待页面加载完成,再点击播放按钮。
print("循环开始*************")
num = 0
# 循环5次 每次都看1集
for i in range(5):
num += 1
print("当前的次数为:{}".format(num))
# 下一节的css选择器 .fa-chevron-right
play_next = driver.find_element_by_css_selector(".fa-chevron-right")
# 点击下一页
action = ActionChains(driver)
action.click(play_next).perform()
# 切换下一页后,等待一段时间
time.sleep(5)
driver.implicitly_wait(10)
# .vjs-big-play-button 获取播放按钮
play_button = driver.find_element_by_css_selector(".vjs-big-play-button")
# 点击播放按钮
action = ActionChains(driver)
action.click(play_button).perform()
# 模拟看15s
print("开始观看第{}集".format(num))
time.sleep(15)
print("结束观看第{}集".format(num))
# 关闭浏览器
driver.close()
接下来右键运行,需要我们在控制台输入验证码,输入验证码后,即可完成视频的自动播放功能。