Selenium(十二):操做Cookie、調用JavaScript、HTML5的視頻播放

1. 操做Cookie

有時候咱們想要驗證瀏覽器中cookie是否正確,由於基於真實cookie的測試是沒法經過白盒和集成測試的。WebDriver提供了操做Cookie的相關方法,能夠讀取、添加和刪除cookie信息。html

WebDriver操做cookie的方法:web

get_cookies():得到全部cookie信息canvas

ge_cookie(name):返回字典的key爲「name」的cookie信息數組

add_cookie(cookie_dict):添加cookie。「cookie_dict」指字典對象,必須有name和value值瀏覽器

delete_cookie(name,optionsString):刪除cookie信息。「name」 是要刪除的cookie的名稱,「optionsString」是該cookie的選項,目前支持的選項包括「路徑」cookie

delete_all_cookies():刪除全部信息網絡

下面經過get_cookies()來換取當前瀏覽器的cookie信息。ide

from selenium import webdriver

wd = webdriver.Chrome()

wd.get('http://youdao.com')

#得到cookie信息
cookies = wd.get_cookies()
#將得到cookie的信息打印
print(cookies)

輸出結果:函數

 

 

從執行結果能夠看出,cookie數據是以字典的形式進行採訪的。知道了cookie的存放形式,接下來咱們就能夠按照這種形式向瀏覽器中寫入cookie信息。學習

from selenium import webdriver

wd = webdriver.Chrome()

wd.get('http://youdao.com')

#向cookie的name和value中添加會話信息
wd.add_cookie({'name':'xhh','value':'xiaohuihui'})

#遍歷cookies中的name和value信息並打印
for cookie in wd.get_cookies():
    print("%s -> %s" % (cookie['name'],cookie['value'])) 

輸出結果:

 

從執行結果能夠看到,第四條cookie信息是在腳本執行過程當中經過add_cookie()方法添加的。經過遍歷獲得全部的cookie信息,從而找到key爲「name」和「value」的特定cookie的value。

name在上面狀況下會用到cookie的操做呢?例如開發人員開發一個姑娘,當用戶登陸後,會將用戶的用戶名寫入瀏覽器cookie,指定的key爲「username」,name咱們就能夠經過get_cookies()找到username,打印value。若是找不到username或對應的value爲空,那麼說明cookie沒有成功的保存到瀏覽器中。

delete_cookie()和 delete_all_cookies()的使用也很簡單,前者經過name刪除一個特定的cookie信息,後者直接刪除瀏覽器中全部的cookies()信息。

2. 調用JavaScript

雖然WebDriver提供了操做瀏覽器的前進和後退方法,但對於瀏覽器滾動條並無提供相應的操做方法。在這種狀況下,就能夠藉助JavaScript來控制瀏覽器的滾動條。WebDriver提供了execute_script()方法來執行JavaScript代碼。

通常咱們想到的必須使用滾動條的場景是:註冊時的法律條文的閱讀。判斷用戶是否閱讀完的標誌是:滾動條是否拉倒頁面底部。固然,有時候爲了使操做更接近用戶行爲也會使用滾動條,例如用戶要操做的元素在頁面的第二屏,通常用戶不會對看不到的元素進行操做,那麼就須要先將滾動條拖動到頁面的第二屏再進行操做。

用於調整瀏覽器滾動條位置的JavaScript代碼以下:

<!-- window.scrollTo(左邊距,上邊距); -->
window.scrollTo(0,500);

window.scrollTo()方法用於設置瀏覽器窗口滾動條的水平和垂直位置。方法的第一個參數表示水平的左間距,第二個參數表示垂直的上邊距。

代碼以下:

from selenium import webdriver
from time import sleep

wd = webdriver.Chrome()

wd.get('http://www.baidu.com')

#設置瀏覽器窗口大小
wd.set_window_size(600,600)

#搜索
wd.find_element_by_id("kw").send_keys("selenium")
wd.find_element_by_id("su").click()

sleep(2)

#經過JavaScript設置瀏覽器窗口的滾動條位置
js = "window.scrollTo(100,450)"
wd.execute_script(js)

經過瀏覽器打開百度進行搜索,而且提早經過set_window_size()方法將瀏覽器窗口設置爲固定寬高顯示,目的是讓窗口出現水平和垂直滾動條。而後經過execute_script()方法執行JavaScript代碼來移動滾動條的位置。

除此以外,咱們還能夠作到讓滑動條動態移動,代碼以下:

from selenium import webdriver
from time import sleep

wd = webdriver.Chrome()

wd.get('https://www.taobao.com/')
sd = 0
for i in range(1,50):
    sd += 100
    js = "var q=document.documentElement.scrollTop=%s"%(sd)
    wd.execute_script(js)
    sleep(0.5)

作的比較簡單,你們能夠修改下,作的更加完美,只要控制參數就能上下移動。

左右移動就須要調用方法:

scrollLeft:滾動條向右移動

固然JavaScript的做用不單單體如今瀏覽器滾動條的操做上 ,還能夠用它向頁面中的textarea文本框輸入內容。

html代碼:

<textarea id="id" style="width: 98%;" cols="50" rows="5" class="txtarea">
</textarea>

雖然咱們能夠經過id的方式將其定位。但經過send_keys()向文本框中輸入文本信息會出現一些不合理的狀況,例如文本直接居中添加。這種狀況下,就須要藉助JavaScript代碼完成輸入。

from selenium import webdriver
from time import sleep

wd = webdriver.Chrome()

wd.get('http://127.0.0.1:8020/day01/index.html')

text = "input text"
js = "var sum=document.getElementById('id');sum.value='"+text+"';"
wd.execute_script(js)

首先定義了要輸入的內容text,而後將text與JavaScript代碼經過「+」進行拼接。這樣作的目的是爲了使輸入內容變得可自定義。最後,經過execute_script()執行JavaScript代碼。

3. HTML5的視頻播放

目前HTML5技術已經成爲主流,目前主流的瀏覽器都已支持HTML5。愈來愈多的應用使用了HTML5元素,如canvas、video等,另外網頁存儲功能更增長了用戶的網絡體驗,使得愈來愈多的開發者在使用這樣的標準,因此咱們也須要學習如何使用自動化技術來測試它們。

WebDriver支持在指定的瀏覽器上測試HTML5,另外,咱們還可使用JavaScript來測試這些功能,這樣就能夠在如何瀏覽器上測試HTML5了。

大多數瀏覽器使用控件(如Flash)來播放視頻,可是不一樣的瀏覽器須要使用不一樣的插件。HTML5定義了一個新的元素<video>,指定了一個標準的方式來嵌入電影片斷,IE9+、Firefox、Opera、Chrome都支持該元素。

案例:

from selenium import webdriver
import time
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

wd = webdriver.Chrome()

wd.get('https://www.bilibili.com/video/av76611945')

video=WebDriverWait(wd,30,0.5).until(EC.presence_of_element_located((By.XPATH,"//div[@id='bilibiliPlayer']/div[1]/div[1]/div[9]/video")))  # 找到視頻

#返回播放文件地址
url = wd.execute_script("return arguments[0].currentSrc;",video)
print(url)

#播放視頻
print("start")
wd.execute_script("return arguments[0].play()",video)

time.sleep(15)

#暫停視頻
print("stop")
wd.execute_script("arguments[0].pause()",video)

JavaScript函數有個內置的對象叫作arguments。argument對象包含了函數調用的參數數組,[0]表示取對象的第一個值。

currentSrc返回當前音頻或視頻的URL。若是未設置音頻或視頻,則返回空字符串。

load()、play()、pause()等控制着視頻的加載、播放和暫停。

這樣咱們就實現了最基本的播放和暫停視頻了,至於視頻加速減速什麼的,就要本身摸索了(由於我也不會,小聲bb)。

相關文章
相關標籤/搜索