最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python自動化測試之Selenium詳解

 更新時間:2022年03月13日 16:21:45   投稿:BJT  
這篇文章主要為大家詳細介紹了python自動化測試之Selenium,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

1.安裝

完成自動化測試,需要配置三個東西。

在這里插入圖片描述

selenium:pip就可以了

chrome:瀏覽器下載一個谷歌瀏覽器就行

chrome-driver:下載地址http://chromedriver.storage.googleapis.com/index.html

這里需要對應到自己的瀏覽器版本下載??梢詤⒖歼@篇

http://m.fzitv.net/article/240643.htm

從瀏覽器上下載到本地后,本機mac上自動保存至Download/目錄下

但我們要把它轉移到該去的地方

具體終端命令如下:

#目錄到下載位置
cd Downloads/
#解壓zip文件
unzip chromedriver_mac64.zip 
#拿到解壓后文件Unix Executable類型文件后,移動它該去的位置
mv chromedriver /usr/local/bin/

2.基礎操作

下面就來了解一下 Selenium 的一些基礎操作把。先寫一點簡單的小功能演示一下:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
browser = webdriver.Chrome()
browser.get('https://www.baidu.com')
input = browser.find_element_by_id('kw')
input.send_keys('楊冪')
input.send_keys(Keys.ENTER)
print(browser.current_url)
print(browser.get_cookies())
print(browser.page_source)

運行以上代碼,可以看到自動彈出來一個 Chrome 瀏覽器,并且上面標示了: Chrome 正受到自動軟件的控制 。然后打開了百度,在輸入框中輸入了 “楊冪” 進行搜索

在這里插入圖片描述

2.1 聲明瀏覽器對象

Selenium 支持非常多的瀏覽器,如:

from selenium import webdriver
# 聲明瀏覽器對象,需對應的驅動程序方可使用
browser = webdriver.android()
browser = webdriver.blackberry()
browser = webdriver.chrome()
browser = webdriver.edge()
browser = webdriver.firefox()
browser = webdriver.ie()
browser = webdriver.opera()
browser = webdriver.phantomjs()
browser = webdriver.safari()

可以看到有我熟悉的 IE 瀏覽器、 Edge 瀏覽器、 FireFox 瀏覽器、 Opera 瀏覽器等等。

2.2 訪問網(wǎng)頁

訪問網(wǎng)頁可以使用 get() 方法,參數(shù)傳入我們想要訪問的網(wǎng)站即可:

from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.jd.com/')
print(browser.page_source)

通過上面兩行代碼,我們可以看到自動打開了瀏覽器并訪問的京東,在控制臺打印了京東的源代碼。

當然,如果想要程序自動關閉瀏覽器的話可以使用:

browser.close()

2.3 查找單個節(jié)點

我們獲取到網(wǎng)頁后,第一步肯定是要先查找到 DOM 節(jié)點啊,然后可以直接從 DOM 節(jié)點中獲取數(shù)據(jù)。

不過有了 Selenium 以后,我們不僅可以查找到節(jié)點獲取數(shù)據(jù),還可以模擬用戶操作,比如在搜索框輸入某些內(nèi)容,點擊按鈕等等操作,不過還是先看看怎么查找節(jié)點:

在這里插入圖片描述

從上面這張圖可以看到,我們想要獲取輸入框,可以通過 id 進行獲取,那么我們接下來的代碼要這么寫:

from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.jd.com/')
input_key = browser.find_element_by_id('key')
print(input_key)

結果如下:

<selenium.webdriver.remote.webelement.WebElement (session="86d1ae1419bee22099a168dfbf921a27", element="53047804-ad39-4dfd-b3fb-a149fb1c8ac8")>

可以看到,我們獲得的元素類型是 WebElement 。

這里順手列出所有的獲得單個節(jié)點的方法:

find_element_by_id
find_element_by_name
find_element_by_xpath
find_element_by_link_text
find_element_by_partial_link_text
find_element_by_tag_name
find_element_by_class_name
find_element_by_css_selector

此外, selenium 還未我們提供了一個通用方法 find_element() ,它需要傳入兩個參數(shù):查找方式 By 和值。實際上上面示例中的查找方式還可以這么寫(效果完全一樣哦~~~)

from selenium import webdriver
from selenium.webdriver.common.by import By
browser = webdriver.Chrome()
browser.get('https://www.jd.com/')
input_key1 = browser.find_element(By.ID, 'key')
print(input_key1)

2.4 查找多個節(jié)點

比如我們要查找左邊的這種導航條的所有條目:

在這里插入圖片描述

可以這么寫

lis = browser.find_elements_by_css_selector('.cate_menu li')
print(lis)

結果如下:

[<selenium.webdriver.remote.webelement.WebElement (session="6341ab4f39733b5f6b6bd51508b62f1d", element="8e0d1a8c-d5dc-4b1f-8250-7f0eca864ea7")>, <selenium.webdriver.remote.webelement.WebElement (session="6341ab4f39733b5f6b6bd51508b62f1d", element="15cd4dc9-42f4-4ed7-9258-9aa29073243c")>, 
......]

下面列出來所有的多節(jié)點選擇的方法:

find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector

同樣,多節(jié)點選擇也有一個 find_elements() 的方法,

3.等待

如今,大多數(shù) Web 應用程序都在使用 AJAX 技術。當瀏覽器加載頁面時,該頁面中的元素可能會以不同的時間間隔加載。這使定位元素變得困難:如果 DOM 中尚不存在元素,則定位函數(shù)將引發(fā) ElementNotVisibleException 異常。使用等待,我們可以解決此問題。等待在執(zhí)行的動作之間提供了一定的松弛時間-主要是定位元素或對該元素進行的任何其他操作。

Selenium Webdriver 提供兩種類型的等待-隱式和顯式。顯式等待使 WebDriver 等待特定條件發(fā)生,然后再繼續(xù)執(zhí)行。隱式等待使 WebDriver 在嘗試查找元素時輪詢DOM一定時間。

3.1 顯式等待

我們可以使用 time.sleep() 來設定等待時間,完全沒有問題,但是它需要將條件設置為要等待的確切時間段。如果我們不知道準確的渲染時間,我們就無法設定一個比較合適的值。

Selenium 為我們提供了 WebDriverWait 與 ExpectedCondition 來完成這件事情,看代碼:

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
driver = webdriver.Chrome()
driver.get("https://www.jd.com/")
try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "key"))
    )
finally:
    driver.quit()

結果如下:

<selenium.webdriver.remote.webelement.WebElement (session="b1baacca997d18d7d54447127c844d15", element="a472369e-3196-4456-b43e-4e1b280bf5b9")>

上面我們使用了 WebDriverWait 來設置最長等待時間,這里我們選擇獲取 JD 首頁的輸入框,我們限定的等待時間為 10s ,如果它在 10s 內(nèi)都無法返回結果,將會拋出 TimeoutException 。默認情況下, WebDriverWait 每 500 毫秒調(diào)用 ExpectedCondition ,直到成功返回。

3.2 隱式等待

隱式等待告訴 WebDriver 在嘗試查找不立即可用的一個或多個元素時在一定時間內(nèi)輪詢 DOM 。默認設置為 0 。設置后,將在 WebDriver 對象的生存期內(nèi)設置隱式等待。

from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(10) # seconds
driver.get("https://www.jd.com/")
key = driver.find_element_by_id("key")
print(key)

節(jié)點交互

Selenium 為我們提供了一些節(jié)點的交互動作,如輸入文字時可以用 send_keys() 方法,清空文字時可以用 clear() 方法,點擊按鈕時可以用 click() 方法。

from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get('https://www.taobao.com/')
input = driver.find_element_by_id('q')
input.send_keys('IPad')
time.sleep(1)
input.clear()
input.send_keys('Surface Pro')
button = driver.find_element_by_class_name('btn-search')
button.click()

在上面這個示例中,我們先打開淘寶網(wǎng),并且開啟了隱式等待,先在搜索框中輸入了 IPad ,在等待 1s 后刪除,再輸入了 Surface Pro ,然后點擊了搜索按鈕,先在淘寶搜索需要用戶登錄才能搜索,所以我們直接跳轉到了登錄頁。

執(zhí)行 JavaScript

對于某些 Selenium API 沒有提供的操作,我們可以通過模擬運行 JavaScript 的方式來完成,用到的方法是 execute_script() ,比如我們在淘寶首頁將滾動條滑到底部:

from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.taobao.com/')
driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')

獲取信息

前面我們介紹了如何拿到 DOM 節(jié)點,那么最重要的是我們要從 DOM 節(jié)點上來獲取我們需要的信息。

因為我們獲取的是 WebElement 類型,而 WebElement 也提供了相關的方法來提取節(jié)點信息。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# 實例化一個啟動參數(shù)對象
chrome_options = Options()
# 設置瀏覽器窗口大小
chrome_options.add_argument('--window-size=1366, 768')
# 啟動瀏覽器
driver = webdriver.Chrome(chrome_options=chrome_options)
url = 'https://www.geekdigging.com/'
driver.get(url)
title = driver.find_element_by_xpath('//*[@id="text-4"]/div/div/div[1]/div[2]/a')
print(title)
# 獲取屬性信息
print(title.get_attribute('href'))
# 獲取文本信息
print(title.text)
# 獲取位置
print(title.location)
# 獲取大小
print(title.size)

上面因為 Chrome 默認打開大小有點小,打開小編博客的時候小編選擇的這個 DOM 節(jié)點正好看到,所以小編設置了一下 Chrome 瀏覽器打開時的大小。

具體信息的供大家參考:

  • parent:查找到此元素的WebDriver實例的內(nèi)部引用。
  • rect:具有元素大小和位置的字典。
  • screenshot_as_base64:以 base64 編碼字符串的形式獲取當前元素的屏幕快照。
  • screenshot_as_png:以二進制數(shù)據(jù)獲取當前元素的屏幕截圖。最后這兩個獲取元素屏幕快照,在獲取驗證碼的時候將驗證碼截取出來會很好用的。

前進和后退

我們使用瀏覽器最上面的地方有一個前進和后退按鈕,Selenium 完成這兩個動作使用了 back() 和 forward() 這兩個方法。

import time
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.jd.com/')
browser.get('https://www.taobao.com/')
browser.get('https://www.geekdigging.com/')
browser.back()
time.sleep(1)
browser.forward()

Cookies

又到了一個重點內(nèi)容, Cookies ,它是和服務端保持會話的一個重要元素。 Selenium 為我們提供了一些方法,讓我們可以方便的對 Cookies 進行增刪改查等操作。示例如下:

from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.geekdigging.com/')
# 獲取 cookies
print(browser.get_cookies())
# 添加一個 cookie
browser.add_cookie({'name': 'name', 'domain': 'www.geekdigging.com', 'value': 'geekdigging'})
print(browser.get_cookies())
# 刪除所有 cookie
browser.delete_all_cookies()
print(browser.get_cookies())

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內(nèi)容! 

相關文章

  • Python檢查圖片是否損壞及圖片類型是否正確過程詳解

    Python檢查圖片是否損壞及圖片類型是否正確過程詳解

    這篇文章主要介紹了Python檢查圖片是否損壞及圖片類型是否正確過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • 使用Python進行視頻相似度比較實例

    使用Python進行視頻相似度比較實例

    這篇文章主要介紹了使用Python進行視頻相似度比較實例,本文通過漢明距離算法與圖片比較等方法對比兩個視頻流的相似度,文中提供了部分實現(xiàn)代碼與解決思路,需要的朋友可以參考下
    2023-07-07
  • TensorFlow基于MNIST數(shù)據(jù)集實現(xiàn)車牌識別(初步演示版)

    TensorFlow基于MNIST數(shù)據(jù)集實現(xiàn)車牌識別(初步演示版)

    這篇文章主要介紹了TensorFlow基于MNIST數(shù)據(jù)集實現(xiàn)車牌識別(初步演示版),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • Python安裝OpenCV庫超時失敗解決

    Python安裝OpenCV庫超時失敗解決

    使用pip?installopencv-python安裝時,安裝速度很慢,本文主要介紹了Python安裝OpenCV庫超時失敗,具有一定的參考價值,感興趣的可以了解一下
    2024-05-05
  • python中屏蔽輸出示例詳解

    python中屏蔽輸出示例詳解

    python中屏蔽輸出包含屏蔽標準輸出(比如打印出來的內(nèi)容)、屏蔽標準錯誤(錯誤信息)還有屏蔽logging信息等,這篇文章主要介紹了python中屏蔽輸出,需要的朋友可以參考下
    2024-05-05
  • 使用mypy對python程序進行靜態(tài)檢查

    使用mypy對python程序進行靜態(tài)檢查

    大家好,本篇文章主要講的是使用mypy對python程序進行靜態(tài)檢查,感興趣的同學快來看一看吧,對你有幫助的話記得收藏一下哦
    2021-11-11
  • 解決Python找不到ssl模塊問題 No module named _ssl的方法

    解決Python找不到ssl模塊問題 No module named _ssl的方法

    這篇文章主要介紹了解決Python找不到ssl模塊問題 No module named _ssl的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • 對Python Pexpect 模塊的使用說明詳解

    對Python Pexpect 模塊的使用說明詳解

    今天小編就為大家分享一篇對Python Pexpect 模塊的使用說明詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • 利用python繪制二三維曲面和矢量流線圖的代碼示例

    利用python繪制二三維曲面和矢量流線圖的代碼示例

    這篇文章主要給大家詳細介紹了如何利用python繪制二三維曲面和矢量流線圖,文中通過代碼示例介紹的非常詳細,對我們學習或工作有一定的幫助,需要的朋友可以參考下
    2023-07-07
  • 詳解Python中的多線程編程

    詳解Python中的多線程編程

    這篇文章主要介紹了詳解Python中的多線程編程,Python中的多線程一直是Python學習中的重點和難點,要反復鞏固!需要的朋友可以參考下
    2015-04-04

最新評論

岗巴县| 冷水江市| 无棣县| 西青区| 秦皇岛市| 哈尔滨市| 利津县| 昌邑市| 长垣县| 南充市| 康乐县| 东源县| 镇康县| 沂南县| 鲁山县| 东乡族自治县| 贵阳市| 吉林市| 桦甸市| 贺州市| 连城县| 阿拉善右旗| 林州市| 吴川市| 辽宁省| 临高县| 招远市| 乐山市| 阿瓦提县| 邳州市| 伊川县| 龙门县| 福建省| 灌云县| 和平区| 健康| 宿迁市| 石棉县| 南靖县| 临夏市| 屏山县|