亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

新版selenium4.0 + Python使用詳解

 更新時(shí)間:2022年07月12日 11:04:19   作者:魂尾ac  
本文主要介紹了新版selenium4.0 + Python使用詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1、selenium簡(jiǎn)介

Selenium是一個(gè)用于Web應(yīng)用程序測(cè)試的工具,Selenium測(cè)試直接運(yùn)行在瀏覽器中,就像真正的用戶在操作一樣。支持的瀏覽器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等; 支持的開發(fā)語言有Java、Python、C#、ruby。

  • 2004年selenium誕生
  • 2006年webdriver誕生
  • 2008年selenium與webdriver合并selenium2.0
  • 2016年selenium3.0誕生
  • 2021年selenium4.0誕生

Selenium IDE

        嵌入到FIrefox瀏覽器中的一個(gè)插件,實(shí)現(xiàn)簡(jiǎn)單的瀏覽器操作的錄制和回放功能,應(yīng)用場(chǎng)景:快速的創(chuàng)建bug重現(xiàn)場(chǎng)景,在測(cè)試人員測(cè)試過程中,發(fā)現(xiàn)bug之后可以通過IDE將重現(xiàn)的步驟錄制下來,以幫助開發(fā)人員更容易的重現(xiàn)bug

IDE錄制的腳本可以轉(zhuǎn)換為多種語言。從而幫助我們快速的開發(fā)腳本

Ps: 按經(jīng)驗(yàn)建議盡量少用錄制,在人工智能沒發(fā)展到一定程度,這是一條歪路。

Selenium RC

                Selenium RC 是Selenium家族的核心部分。Selenium RC 支持多種不同語言編寫的自動(dòng)化腳本測(cè)試,通過Selenium RC服務(wù)器作為代理服務(wù)器去訪問應(yīng)用,從而達(dá)到測(cè)試的目的。

Selenium RC分為Client Libraries和Selenium Server。Client Libraries庫主要用于編寫測(cè)試腳本,用來控制Selenium Server的庫。Selenium Server 負(fù)責(zé)控制瀏覽器行為??偟膩碚f,Selenium Server 包括三個(gè)部分:Launcher、Http Proxy和Core。其中,Selenium Core是被Selenium Server嵌入到瀏覽器頁面中。其實(shí)Selenium Core就是一堆JavaScript函數(shù)的集合,即通過這些javascript函數(shù)我們才能實(shí)現(xiàn)用程序?qū)g覽器的操作。Launcher用于啟動(dòng)瀏覽器,把Selenium Core加載到瀏覽器頁面當(dāng)中,并把瀏覽器的代理設(shè)置為Selenium Server的Http Proxy。

Ps: 建議做WEB自動(dòng)化過程中可以順便將js學(xué)會(huì)。

2、環(huán)境 Python + selenium

2.1、selenium庫安裝

命令:pip insatll selenium  或 pip3 install selenium

2.2、驅(qū)動(dòng)下載

瀏覽器驅(qū)動(dòng)下載 chrome  (ie、火狐可自行學(xué)習(xí))

確認(rèn)谷歌瀏覽器版本,操作如下圖,確認(rèn)版本為100.0.4896.127

針對(duì)瀏覽器版本去下載對(duì)應(yīng)的驅(qū)動(dòng)

大家可以自行去www.baidu.com搜索谷歌瀏覽器驅(qū)動(dòng)找到后下載,不過這個(gè)過程可能比較久。在這里提供所有版本的下載連接

http://chromedriver.storage.googleapis.com/index.html

進(jìn)入網(wǎng)站找到對(duì)應(yīng)版本的驅(qū)動(dòng)下載,上圖版本是100.0.4896.127,是以要找到對(duì)應(yīng)版本下載,如果找不到對(duì)應(yīng)版本,可以找最相近的版本。也是可以用來驅(qū)動(dòng)瀏覽器的,不能用一定會(huì)有對(duì)應(yīng)版本出現(xiàn);現(xiàn)在沒有找到100.0.4896.127版本,所以找到最接近版本100.0.4896.60下載

選擇當(dāng)前系統(tǒng)所對(duì)應(yīng)的版本,像window版本,直接下win32的包,不用擔(dān)心64位系統(tǒng)。通用,如果不通用,肯定會(huì)有一個(gè)win64的包。

將下載的zip壓縮包解壓出來的chromedriver.exe的文件

2.3、驅(qū)動(dòng)位置與使用

驅(qū)動(dòng)位置有兩種,這里講靈活放置法,規(guī)范放置法大家可當(dāng)課題自行去研究。

靈活放置是將驅(qū)動(dòng)文件放到selenium執(zhí)行代碼文件同級(jí)目錄下即可。

舉例:

新增一個(gè)python項(xiàng)目,然后將chromedriver.exe文件放到項(xiàng)目目錄下

新增一個(gè)demo01.py文件在文件里編寫打開百度的代碼

from selenium import webdriver
dr = webdriver.Chrome()
dr.get('https://www.baidu.com')

運(yùn)行。如下圖,成功打開谷歌瀏覽器,訪問百度網(wǎng)站

3、selenium庫代碼講解

使用selenium之前,需要先了解一些網(wǎng)頁元素定位的知識(shí),結(jié)合這些知識(shí)來實(shí)現(xiàn)元素定位后點(diǎn)擊,編輯等

如何手動(dòng)進(jìn)行元素定位?

 打開瀏覽器---f12進(jìn)入開發(fā)者模式---在Elements頁面---使用選擇工具去頁面點(diǎn)擊對(duì)應(yīng)元素---HTML將自動(dòng)展開并高亮顯示選擇到的元素標(biāo)記

重要知識(shí)點(diǎn)

  • find_element()  與 find_elements() 方法
  • 元素定位八大方式

將上面兩點(diǎn)結(jié)合起來講解,如下:

3.1~3.7介紹定位八大方式,3.8是講js獨(dú)立腳本

3.1、id

在網(wǎng)頁HTML中發(fā)現(xiàn)有一個(gè)元素剛好有id屬性,很幸運(yùn),因id基本上需要唯一,不然Doc會(huì)出現(xiàn)未知異常。我們可以使用其定位出來這元素來實(shí)現(xiàn)對(duì)應(yīng)操作。因?yàn)樗俏ㄒ坏?,所以一般可以使用find_element()來定位

舉例:

進(jìn)入百度,搜索’路飛’,

可以通過 f12在html里知道百度搜索框架的id是kw,搜索按鈕的id是su

所以編寫代碼如下:

#導(dǎo)入庫
 
from selenium import webdriver
from selenium.webdriver.common.by import By
 
#初始化瀏覽器
dr = webdriver.Chrome()
 
 
 
#打開百度
dr.get('https://www.baidu.com')
 
#輸入路飛
dr.find_element(By.ID, 'kw').send_keys('路飛')
 
#點(diǎn)擊百度一下
dr.find_element(By.ID, 'su').click()

在最開始需要將 selenium 的 webdriver與By 導(dǎo)入

在輸入路徑語句中查詢?cè)胤椒╢ind_element里參數(shù)一By.ID表示定位屬性是id,參數(shù)二表示屬性值為kw

代碼執(zhí)行如下

3.1、name

在網(wǎng)頁HTML中發(fā)現(xiàn)有一個(gè)元素有name屬性,也很幸運(yùn),因?yàn)殚_發(fā)能添加name,也是要給其標(biāo)記,將其與其他元素區(qū)別。我們可以使用其定位出來這元素來實(shí)現(xiàn)對(duì)應(yīng)操作。

舉例:

還是進(jìn)入百度,搜索’諸葛亮’

可以通過 f12在html里知道百度搜索框的name是wd,搜索按鈕的id是su

所以編寫代碼如下:(在上面已經(jīng)導(dǎo)包了,下面的代碼就不導(dǎo)包了)

dr = webdriver.Chrome()
dr.get('https://www.baidu.com')
dr.find_element(By.NAME, 'wd').send_keys('諸葛亮')
dr.find_element(By.ID, 'su').click()

可以見輸入諸葛亮這條語句查詢?cè)胤椒╢ind_element參數(shù)一由 By.NAME表示用name定位,參數(shù)二也是取name的值wd

代碼執(zhí)行如下

3.3、Class

網(wǎng)頁HTML一般都會(huì)有class屬性,前端開發(fā)者會(huì)用其來歸類批量添加樣式,所以它可能不是唯一的標(biāo)識(shí)。這里我們可能會(huì)使用find_elements()來獲取

舉例:

進(jìn)入CSDN,點(diǎn)擊分類

使用f12查看CSDN的HTML,發(fā)現(xiàn)在所有分類元素的class均是navigation-right

所以代碼編寫如下

dr = webdriver.Chrome()
dr.get('https://www.csdn.net/')
#點(diǎn)擊第一個(gè)分類
dr.find_elements(By.CLASS_NAME, 'navigation-right')[0].click()
#等待3秒
time.sleep(3)
#點(diǎn)擊第一個(gè)分類
dr.find_elements(By.CLASS_NAME, 'navigation-right')[1].click()

可以見點(diǎn)擊查詢?cè)胤椒╢ind_element參數(shù)一由 By.CLASS_NAME表示了要取class定位,參數(shù)二則是給出class的值

代碼執(zhí)行如下

3.4、tag

tag是網(wǎng)頁HTML中的標(biāo)記,HTML由標(biāo)記組成,一個(gè)標(biāo)記就是一個(gè)元素,所以它基本上不會(huì)唯一,所以也使用find_elemenets()來獲取

舉例:

進(jìn)入CSDN,點(diǎn)擊頭條新聞

使用F12查看CSDN的HTML,發(fā)現(xiàn)頭條新聞的分類元素的標(biāo)簽是dl

所以代碼編寫如下

dr = webdriver.Chrome()
dr.get('https://www.csdn.net/')
dr.find_elements(By.TAG_NAME, 'dl')[0].click()

可以見點(diǎn)擊查詢?cè)胤椒╢ind_element參數(shù)一由 By.TAG_NAME表示了要取tag定位,參數(shù)二則是給出tag名

代碼執(zhí)行結(jié)果如下

3.5、Link

Link表示包含有屬性href = “https://www.xxxxxxx.com”元素,可以通過linktext定位,linktext是頁面上展示的文字。它還可以部分linktext定位。

網(wǎng)上很多文章將linktext通過全linktext與部分linktext區(qū)分為兩種定位方式,沒有本文最后的JS定位方式,也是對(duì)的。

舉例:

進(jìn)入CSDN,點(diǎn)擊分類

使用F12查看CSDN的HTML,發(fā)現(xiàn)分類都是有href屬性的,可以用linktext定位

所以代碼編寫如下:

dr = webdriver.Chrome()
dr.get('https://www.csdn.net/')
#通過linetext點(diǎn)擊‘Java'分類
dr.find_element(By.LINK_TEXT, 'Java').click()
time.sleep(3)
#通過部分linktext點(diǎn)擊‘人工智能'分類
dr.find_element(By.PARTIAL_LINK_TEXT, '人工智').click()

參數(shù)一By.LINK_TEXT表示全部匹配linktext定位找到元素,參數(shù)二值是頁面這個(gè)鏈接的全部文案‘Java’

參數(shù)一By.PARTIAL_LINK_TEXT表示模糊匹配linktext定位找到元素 ,參數(shù)二值是頁面這個(gè)鏈接部分文案‘人工智’

代碼執(zhí)行結(jié)果如下

3.6、xpath

xpath是XML路徑定位器,HTML與XML相似,所以也可以用xpath來定位,這個(gè)相對(duì)于前面的來說,需要大家掌握一些xpath的理論知識(shí)。

表達(dá)式

描述

nodename

選取此節(jié)點(diǎn)的所有子節(jié)點(diǎn)

/

從當(dāng)前節(jié)點(diǎn)選取直接子節(jié)點(diǎn)

//

從當(dāng)前節(jié)點(diǎn)選取子孫節(jié)點(diǎn)

.

選取當(dāng)前節(jié)點(diǎn)

. .

選取當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)

@

選取屬性

*

任何元素

xpath定位邏輯是通過id、name、class等屬性定位到一個(gè)大范圍元素然后再通過路 徑 定位到精準(zhǔn)元素;針對(duì)定位到多個(gè)元素時(shí)也可以下標(biāo)取值,但下標(biāo)從1開始。可以 用 xpath定位到任何元素

表格的內(nèi)容弄懂后,但并不一定會(huì)用到,懂了是讓自己知道xpath是如何定位的;實(shí)戰(zhàn)中基本上用到xpath定位時(shí),一般使用瀏覽器f12里面copy xpath功能,獲取到對(duì)應(yīng)元素的xpath(老手一般是自己寫xpath,因?yàn)镕12有時(shí)復(fù)制的xpath不是最精簡(jiǎn)的)

比如我要獲取CSDN技術(shù)樹元素的xpath,只需要按照下圖箭頭的順序點(diǎn)擊,即可獲取到對(duì)應(yīng)的xpath了

然后用基來舉例:

舉例:

進(jìn)入CSDN,點(diǎn)擊技能樹元素

通過F12里的copy xpath功能可以知道技能樹元素的xpath為//*[@id="www-home-right"]/div[1]/div[2]/div[1]/div/span

所以代碼編寫如下

dr = webdriver.Chrome()
dr.get('https://www.csdn.net/')
dr.find_element(By.XPATH, '//*[@id="www-home-right"]/div[1]/div[2]/div[1]/div/span').click()

參數(shù)一By.XPATH表示使用xpath方式定位,參數(shù)二是給元素xpath值

代碼執(zhí)行如下

3.7、css選擇器

css是前端樣式,這里說的css定位是用css樣式里定位元素用的方法叫做css選擇器。

符號(hào).代表class,  符號(hào) # 代表id, 路徑空格寫tag名

它與xpath一樣,可以定位到任何元素,也可以直接通過F12的copy selector來取 得元素的css選擇器

舉例

進(jìn)入CSDN, 點(diǎn)擊CSDN指數(shù)元素

通過f12里的copy selector取得元素的css選擇器為:#www-home-right > div.www-home-silde > div.ContentBlock > div:nth-child(1) > div > span

所以代碼編寫如下

dr = webdriver.Chrome()
dr.get('https://www.csdn.net/')
dr.find_element(By.CSS_SELECTOR, '#www-home-right > div.www-home-silde > div.ContentBlock > div:nth-child(2) > div > span').click()

參數(shù)一By.CSS_SELECTOR表示使用css方式定位,參數(shù)二是給元素css選擇器

代碼執(zhí)行如下:

3.8、js執(zhí)行

js不是定位器

js不是定位器

js不是定位器

js是javascript,是可以獨(dú)以運(yùn)行的腳本;不使用selenium的方法,進(jìn)行頁面元素的點(diǎn)擊、輸入、拖拽等等操作,像如果對(duì)js使用很熟練,那么也就完全不需要管上面的定位方式。全部可以使用js來實(shí)現(xiàn)頁面元素的各種操作。

像滾動(dòng)條拖拽是沒法用元素定位操作的,只能使用js

舉例:(新手經(jīng)典問題)

進(jìn)入CSDN,拖拽滾動(dòng)條

滾動(dòng)條拖拽的js為document.documentElement.scrollTop=10000

代碼編寫如下

dr = webdriver.Chrome()
dr.get('https://www.csdn.net/')
dr.execute_script('document.documentElement.scrollTop=10000')

使用exeute_script執(zhí)行JS 

代碼執(zhí)行如下

4、selenium封裝

上面講了selenium八大元素定位方式,但做自動(dòng)化肯定不是一直寫這樣的python代碼,因?yàn)闀r(shí)間與空間上都浪費(fèi)人力,不如功能測(cè)試,所以我們需要學(xué)會(huì)去二次封裝selenium。將其制定成規(guī)則化的自然代碼來讓自動(dòng)化變得簡(jiǎn)單易懂。

4.1、設(shè)計(jì)規(guī)則

一、做自動(dòng)化是模擬人的操作,所以有操作字段:點(diǎn)擊、輸入等

二、定位元素需要定位方式,所以有定位器字段:id、name、class、tag、link、plink、xpath、css、js

三、定位器有了,定位器的對(duì)象字段也要有

四、頁面相同屬性的元素有多個(gè),所以需要一個(gè)下標(biāo)字段

五、輸入、下拉、檢查需要值,所以值字段也需要一個(gè)

基本上暫時(shí)可以先確定這些字段:

operation、type、locatuion、index、value

4.2、確認(rèn)入口函數(shù)

設(shè)計(jì)好五個(gè)參數(shù)后,基本上操作就只需要這五個(gè)參數(shù)了,所以需要一個(gè)統(tǒng)一入口函數(shù),將這五個(gè)參數(shù)均帶入其實(shí)。

def web_autotest_opr(operation, type, locatuion, index, value)

4.3、設(shè)計(jì)邏輯

一、封裝瀏覽器打開功能,返回瀏覽器對(duì)象

二、封裝入口函數(shù)

三、封裝定位元素方式

四、封裝元素操作方式

4.4、代碼封裝

from selenium import webdriver
from selenium.webdriver.common.by import By

def open_url(url):
????'''
????打開瀏覽順訪問url,并返回瀏器操作句柄
????:param url: 要測(cè)試的網(wǎng)站url
????:return: webdriver對(duì)像
????'''
????opr = webdriver.Chrome()
????opr.get(url)
????return opr


def get_element(opr:webdriver.Chrome, type, locatuion, index):
????'''
????獲取元素并返回
????:param opr: 瀏覽器句柄
????:param type: 定位器類型
????:param locatuion: 定位器
????:param index: 下標(biāo)
????:return: 元素對(duì)象
????'''
????if str.lower(type) == 'id':
????????return opr.find_elements(By.ID, locatuion)[index]
????elif str.lower(type) == 'name':
????????return opr.find_elements(By.NAME, locatuion)[index]
????elif str.lower(type) == 'class':
????????return opr.find_elements(By.CLASS_NAME, locatuion)[index]
????elif str.lower(type) == 'tag':
????????return opr.find_elements(By.TAG_NAME, locatuion)[index]
????elif str.lower(type) == 'link':
????????return opr.find_elements(By.LINK_TEXT, locatuion)[index]
????elif str.lower(type) == 'plink':
????????return opr.find_elements(By.PARTIAL_LINK_TEXT, locatuion)[index]
????elif str.lower(type) == 'xpath':
????????return opr.find_elements(By.XPATH, locatuion)[index]
????elif str.lower(type) == 'css':
????????return opr.find_elements(By.CSS_SELECTOR, locatuion)[index]


def element_opr(el:webdriver.Chrome.find_element, operation, value):
????'''
????元素操作
????:param el: 元素對(duì)象
????:param operation: 操作類型
????:param value: 值
????:return: 成功(True)or失敗(False)
????'''
????if operation == '點(diǎn)擊':
????????el.click()
????????return True
????elif operation == '輸入':
????????el.send_keys(value)
????????return True

def web_autotest_opr(opr:webdriver.Chrome ,operation, type, locatuion, index=0, value=''):
????'''
????元素操作統(tǒng)一入口
????:param opr: 瀏覽器句柄
????:param operation: 操作類型
????:param type: 定位器類型
????:param locatuion: 定位器
????:param index: 下標(biāo)
????:param value: 值
????:return: 成功(True)or失敗(False)
????'''
????if str.lower(type) != 'js':
????????el = get_element(opr, type, locatuion, index)
????????result = element_opr(el, operation, value)
????else:
????????result = opr.execute_script(locatuion)
????return result

這一部分屬于UI自動(dòng)化測(cè)試框架的核心部分的封裝,當(dāng)然邏輯肯定不止這些,并且上面這些代碼是面向過程的,等大家有實(shí)力了,可以慢慢優(yōu)化這些代碼,盡量變成面向?qū)ο蟮摹?/p>

到此這篇關(guān)于新版selenium4.0 + Python使用詳解的文章就介紹到這了,更多相關(guān)selenium4.0 Python使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論