1. 本案例目的
使用selenium庫(kù)完成動(dòng)點(diǎn)擊下一頁(yè),點(diǎn)擊視頻操作等過(guò)程,
如果你非要說(shuō)這是XX,那我也不過(guò)多辯解,畢竟批評(píng)不自由,贊美無(wú)意義
。
2. 案例實(shí)現(xiàn)
本案例僅是技術(shù)演示,所以會(huì)隱去相關(guān)網(wǎng)址等,讀者可以重點(diǎn)查看這里使用的selenium技術(shù)點(diǎn)即可。另外本版本為V01版本,所以?xún)H僅是可用,很多內(nèi)容都未完善。
1.導(dǎo)入依賴(lài)
import time
from selenium import webdriver # 包
from selenium.webdriver import ActionChains # 模擬鼠標(biāo)操作點(diǎn)擊 下拉
from selenium.webdriver.common.keys import Keys # 鍵盤(pán)按鍵操作\
from selenium.webdriver.chrome.options import Options # 瀏覽器配置
2.初始化driver瀏覽器驅(qū)動(dòng)
定義一個(gè)init函數(shù),在init函數(shù)內(nèi)完成初始化瀏覽器驅(qū)動(dòng)的任務(wù),并實(shí)現(xiàn)瀏覽器全屏等設(shè)置,返回值為一個(gè)初始化后的瀏覽器驅(qū)動(dòng)。
# 初始化
def init():
# 實(shí)現(xiàn)無(wú)可視化界面得操作
chrome_options = Options()
# chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
# 設(shè)置chrome_options=chrome_options即可實(shí)現(xiàn)無(wú)界面
driver = webdriver.Chrome(chrome_options=chrome_options, executable_path='./chromedriver.exe')
# 把瀏覽器實(shí)現(xiàn)全屏
driver.maximize_window()
# 返回driver
return driver
3.登錄頁(yè)面分析及登錄實(shí)現(xiàn)
3.1 登錄頁(yè)面分析
查看登錄頁(yè),頁(yè)面如下:
可以看見(jiàn),登錄頁(yè)包含用戶名,密碼,驗(yàn)證碼等幾個(gè)部分需要輸入,進(jìn)入瀏覽器開(kāi)發(fā)者工具,查看對(duì)應(yīng)的css選擇器。
通過(guò)瀏覽器選擇該元素右鍵復(fù)制對(duì)應(yīng)css選擇器,分別如下:
.UserName
.Password
.code > input:nth-child(3)
這里的驗(yàn)證碼需要識(shí)別,我們可以設(shè)置為手動(dòng)輸入。
實(shí)現(xiàn)代碼如下:
# 初始化網(wǎng)址 用戶名和 密碼
url = 'XXX'
username = 'XXX'
wd = 'XXX'
driver = init() # 初始化瀏覽器驅(qū)動(dòng)
driver.get(url) # 調(diào)用瀏覽器打開(kāi)url
driver.implicitly_wait(3) # 等待3s,以完成頁(yè)面渲染完成
# 定位到用戶名 .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("請(qǐng)輸入驗(yàn)證碼")
code_tag.send_keys(code_input) # 輸入驗(yàn)證碼 這里為手動(dòng)輸入,更新后會(huì)使用機(jī)器打碼
3.2 登錄按鈕選擇及回車(chē)單擊
登錄按鈕分析:
對(duì)應(yīng)的xpath路徑為
/html/body/form/div[2]/div[1]/div[4]/input
選擇登錄元素,并回車(chē)或左鍵單擊
# 獲取登錄按鈕
submit_tag = driver.find_element_by_xpath("/html/body/form/div[2]/div[1]/div[4]/input")
# 模擬回車(chē)操作
submit_tag.send_keys(Keys.ENTER)
# 等待5s
time.sleep(5)
driver.implicitly_wait(10)
點(diǎn)擊登錄后,會(huì)跳轉(zhuǎn)到個(gè)人首頁(yè)。
4. 個(gè)人首頁(yè)頁(yè)面分析與課程選擇實(shí)現(xiàn)
4.1 課程頁(yè)面分析
登錄后,跳轉(zhuǎn)到個(gè)人首頁(yè):
默認(rèn)是學(xué)習(xí)為當(dāng)前標(biāo)簽頁(yè),我們需要點(diǎn)擊當(dāng)前頁(yè)面中對(duì)應(yīng)的課程,打開(kāi)開(kāi)發(fā)者工具,
4.2 課程頁(yè)面選擇并鼠標(biāo)左鍵單擊
復(fù)制對(duì)應(yīng)的css選擇器,并選擇該課程元素:
# 對(duì)應(yīng)的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)
# 加載鼠標(biāo)模擬操作
action = ActionChains(driver)
# 模擬鼠標(biāo)左鍵單擊 并執(zhí)行
action.click(class_01).perform()
點(diǎn)擊課程后,會(huì)彈出一個(gè)新的頁(yè)面–課程頁(yè)面
5. 課程頁(yè)面分析與進(jìn)入到視頻播放頁(yè)
5.1 課程頁(yè)面分析
注意課程頁(yè)面時(shí)彈出的頁(yè)面,需要手動(dòng)切換selenium的當(dāng)前頁(yè)面。
進(jìn)入課程頁(yè)面后,查看頁(yè)面信息,有一個(gè)繼續(xù)學(xué)習(xí)的按鈕,點(diǎn)擊繼續(xù)學(xué)習(xí)的按鈕,可以進(jìn)入到視頻播放頁(yè)面。
5.2 切換當(dāng)前頁(yè)面,并選擇繼續(xù)學(xué)習(xí)按鈕點(diǎn)擊
實(shí)現(xiàn)步驟為:
切換當(dāng)前頁(yè)面
查看繼續(xù)學(xué)習(xí)
元素的css選擇器,并選擇該元素:
# 跳轉(zhuǎn)到視頻播放窗口
# 1. 獲取打開(kāi)的所有窗口
wins = driver.window_handles
print(wins) # 查看所有窗口
# 打印當(dāng)前窗口的句柄
print(driver.current_window_handle)
# 2. 切換語(yǔ)句 切換到你想操作元素的窗口 進(jìn)入新的html頁(yè)面
wins[-1]
driver.switch_to.window(wins[-1])
# 3. 在新的頁(yè)面中,找元素并操作
# .ml12 繼續(xù)學(xué)習(xí)按鈕
play_01 = driver.find_element_by_css_selector(".ml12")
# 單擊繼續(xù)學(xué)習(xí)按鈕
action = ActionChains(driver)
action.click(play_01).perform()
點(diǎn)擊繼續(xù)學(xué)習(xí)后,會(huì)跳到到視頻播放頁(yè)
6. 視頻播放頁(yè)分析與播放實(shí)現(xiàn)
6.1視頻播放頁(yè)分析
進(jìn)入到視頻播放頁(yè)后,點(diǎn)擊視頻播放按鈕,即可播放視頻
6.2 視頻播放實(shí)現(xiàn)
查看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()
7. 視頻播放完畢后,點(diǎn)擊下一頁(yè)
7.1 視頻播放頁(yè)下一頁(yè)元素分析
視頻播放頁(yè)還有下一集按鈕,如下:
7.2 循環(huán)實(shí)現(xiàn)下一集播放
通過(guò)查看瀏覽器開(kāi)發(fā)者工具,可以選擇下一集按鈕,完成當(dāng)前視頻播放完畢,播放下一集的功能。
需要注意的是,需要再切換下一集后,等待頁(yè)面加載完成,再點(diǎn)擊播放按鈕。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-752567.html
print("循環(huán)開(kāi)始*************")
num = 0
# 循環(huán)5次 每次都看1集
for i in range(5):
num += 1
print("當(dāng)前的次數(shù)為:{}".format(num))
# 下一節(jié)的css選擇器 .fa-chevron-right
play_next = driver.find_element_by_css_selector(".fa-chevron-right")
# 點(diǎn)擊下一頁(yè)
action = ActionChains(driver)
action.click(play_next).perform()
# 切換下一頁(yè)后,等待一段時(shí)間
time.sleep(5)
driver.implicitly_wait(10)
# .vjs-big-play-button 獲取播放按鈕
play_button = driver.find_element_by_css_selector(".vjs-big-play-button")
# 點(diǎn)擊播放按鈕
action = ActionChains(driver)
action.click(play_button).perform()
# 模擬看15s
print("開(kāi)始觀看第{}集".format(num))
time.sleep(15)
print("結(jié)束觀看第{}集".format(num))
# 關(guān)閉瀏覽器
driver.close()
8. 運(yùn)行測(cè)試
接下來(lái)右鍵運(yùn)行,需要我們?cè)诳刂婆_(tái)輸入驗(yàn)證碼,輸入驗(yàn)證碼后,即可完成視頻的自動(dòng)播放功能。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-752567.html
到了這里,關(guān)于Python爬蟲(chóng)技術(shù)系列-06selenium完成自動(dòng)化測(cè)試V01的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!