8 - selenium 常見元素操作:三大等待---強制等待、隱性等待、顯性等待


selenium 常見元素操作

  • 三大等待
  • 三大切換(iframe,window,alert)
  • 下拉列表
  • 鼠標和鍵盤
  • js+ dom應用()
  • 上傳操作

1、強制等待:time.sleep()

  必須等待固定時間后才可以往下運行

from selenium import webdriver
import time         # 強制等待需要導入time(譯:泰姆),使用其中的 sleep(譯:私立破) 方法

# 強制等待  sleep(譯:私立破)
# 打開谷歌瀏覽器,建立會話。啟動Chromedriver.exe  打開Chrome
driver = webdriver.Chrome()

# 訪問百度首頁
driver.get("http://www.baidu.com")
# 點擊登錄按鈕
driver.find_element_by_xpath('//div[@id="u1"]//a[@name="tj_login"]').click()

# # 強制等待5秒,在進行下一步操作
time.sleep(10)
# 點擊 用戶名登錄 按鈕
driver.find_element_by_id("TANGRAM__PSP_10__footerULoginBtn").click()
# 強制等待5秒后關閉瀏覽器
time.sleep(10)
driver.quit()

 

2、智能等待分為:隱性等待、顯性等待

隱形等待:implicitly_wait(20)  (譯:隱婆思類.威特)

  會話期間全局設置一次,所有的都通用(與顯性等待不同)

  隱形等待元素不一定是可見的(與顯性等待不同)

  智能等待的隱形等待:會話開始之后使用隱形等待,之后所有的找元素都會調用隱形等待,只有等待元素可見(被找到),等待命令執行;

  找元素是在HTML頁面找,如果一旦加載到了這個HTML頁面,得到了這樣的文檔,就可以開始找了,但是再找的時候元素不一定在頁面上呈現出來了;如果沒有加載出來、沒有渲染出來,雖然已經加載過來了,但是還沒有渲染成功;在加上電腦、網絡不好,可能渲染的時候會很久,可以使用 sleep 一下

from selenium import webdriver

# 打開谷歌瀏覽器,建立會話。啟動Chromedriver.exe  打開Chrome
driver = webdriver.Chrome()

# 智能等待的隱形等待:會話開始之后使用隱形等待,之后所有的找元素都會調用隱形等待,等待元素可見,等待命令執行
# implicitly_wait(譯:隱婆思類.威特)
driver.implicitly_wait(20)

# 訪問百度首頁
driver.get("http://www.baidu.com")
# 點擊登錄按鈕
driver.find_element_by_xpath('//div[@id="u1"]//a[@name="tj_login"]').click()
# 點擊 用戶名登錄 按鈕
driver.find_element_by_id("TANGRAM__PSP_10__footerULoginBtn").click()
# 關閉瀏覽器
driver.quit()

 

顯性等待:他有非常多的條件;

與隱形等待的不同,隱形等待處理不了下面幾種情況;可以處理很多中情況如:

等待元素可見

等待元素可用

等待新窗口出現

等待 url 地址=xxx的時候

等待 的上限是多少秒,每隔0.5秒去查看條件是否成立

明確等到某個條件滿足之后,再去執行下一步操作。

程序每隔xx秒看一眼,如果條件成立了,則執行下一步,否則繼續等待,直到等待的元素可見

超過設置的最長時間,然后拋出TimeoutException. --- .

 

WebDriverWait類:顯性等待類。until(譯:恩太歐)

WebDriverWait(driver,等待時長,輪循周期).until(這個條件成立,才向下執行)  /until_ not()  

expected_ conditions as EC 模塊: 提供了一系列期望發生的條件。(譯:伊克斯盤課題的。肯迪深思)

 

常用的等待判斷

presence_ _of_ element_ located:元素 存在(譯:普軟怎次.俄服.安樂門特.漏開提的)

 

visibility_of_element_located: 元素 可見(譯:魏則比勒底.俄服.安樂門特.漏開提的)

element _to_ be_ clickable: 元素 可點擊(譯:安樂門特.圖.比.快可bou)

ps:這個類有很多判斷方法。具體自行了解。

 

什么時候用?

當你的操作,引起了頁面的變化,而你接下來要操作變化 的元素的時候,就一定要加等待。

 

使用之前,引入相關的庫

from selenium.webdriver.support.wait import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC   (譯:伊克斯盤課題的。肯迪深思)

from selenium.webdriver.common.by import By

使用方法:

1、先確定元素的定位表達式
web_ locator = 'XXXX'

2、調用 webdriverWait 類設置等待總時長、輪詢周期。並調用期until、until_ not方法。 (譯:恩太歐)
WebDriverWait(webdriver對象名,等待總時長,輪詢周期),until(判斷條件)

3、使用expected_ conditions對 應的方法來生成判斷條件。
EC.類名((定位方式、定位表達式))
例: EC.visibility_of_element_located((By.id,web locator)))

 

例:等待百度登陸的彈出框出現,再去操作彈出框。

# 使用之前,引入相關的庫
from selenium.webdriver.support.wait import WebDriverWait               # 等待條件
from selenium.webdriver.support import expected_conditions as EC        # 等待元素可見的條件
from selenium.webdriver.common.by import By                             # 定位類型八種定位方式
from selenium import webdriver


# 打開谷歌瀏覽器,建立會話。啟動Chromedriver.exe  打開Chrome
driver = webdriver.Chrome()

# 訪問百度首頁
driver.get("http://www.baidu.com")
# 點擊登錄按鈕
driver.find_element_by_xpath('//div[@id="u1"]//a[@name="tj_login"]').click()

# 等待元素 id=TANGRAM__PSP_10__footerULoginBtn 可見。等待上限是10秒。直到 條件可見
loc = (By.ID, "TANGRAM__PSP_10__footerULoginBtn")
# EC.visibility_of_element_located(loc)  # 等待元素可見的條件(譯:魏則比勒底.俄服.安樂門特.漏開提的)
# until (譯:昂題爾)直到什么什么條件成立
WebDriverWait(driver, 10, 0.5).until(EC.visibility_of_element_located(loc))

# 點擊 用戶名登錄 按鈕
driver.find_element_by_id("TANGRAM__PSP_10__footerULoginBtn").click()
# 關閉瀏覽器
driver.quit()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM