成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Selenium 之顯性等待詳解

開發 開發工具
后臺看到大家對顯性等待比較感興趣,想詳細了解下如何使用,今天就來繼續跟大家詳細介紹下。

[[421385]]

本文轉載自微信公眾號「Python技術」,作者派森醬 。轉載本文請聯系Python技術公眾號。

上次介紹了下 Selenium 元素等待的三種方法,以及每種元素等待方法的優缺點,在使用場景下該如何操作。并寫了一些具體使用的簡單例子,給大家作為參考。后臺看到大家對顯性等待比較感興趣,想詳細了解下如何使用,今天就來繼續跟大家詳細介紹下。

顯性等待使用

在使用 WebDriverWait 調用可執行方法,除了可定位的元素,還可以使用 selenium 提供的 expected_conditions 模塊中的各種條件,也可以使用 WebElement 的 is_enabled(),is_selected(),is_displayed() 等等方法,還可以使用自己封裝的方法。

這次我們換百度官網測試,首先我先上一段使用顯性等待的標準使用方式,這里使用的 LINK_TEXT 查找的元素:

  1. # 導入庫 
  2. from selenium import webdriver 
  3. from selenium.webdriver.support.ui import WebDriverWait 
  4. from selenium.webdriver.support import expected_conditions as ECS 
  5. from selenium.webdriver.common.by import By 
  6. import time 
  7.  
  8. # executable_path 用于指定driver存放路徑 
  9. browser = webdriver.Chrome(executable_path='/Users/xx/python/chromedriver'
  10.  
  11. # 打開京東官網 
  12. browser.get('https://www.baidu.com/'
  13.  
  14. # 定位要查找的元素 
  15. loc = (By.LINK_TEXT, "關于百度"
  16.  
  17. try: 
  18.   # 等待5秒,直到發現元素 
  19.     WebDriverWait(driver, 5).until(ECS.presence_of_element_located(loc)) 
  20. except
  21.   # 沒有發現元素則會打印提示 
  22.     print("沒有找到對應元素!"
  23. finally: 
  24.   # 發現元素則執行下面的方法 
  25.     driver.find_element_by_link_text('關于百度').click() 
  26.  
  27. #退出瀏覽器 
  28. browser.quit() 

顯性等待方式介紹

好了,知道顯性等待怎么用了,接下來我們來看下,還有哪些其他常見的使用方式:

  • 先來個簡單的,這里通過頁面標題來判斷
  1. # 元素等待直到標題出現 `百度一下,你就知道`  
  2. WebDriverWait(driver,3).until(ECS.title_is('百度一下,你就知道')) 
  3.  
  4. # 元素等待直到標題出現包含 `百度` 即可 
  5. WebDriverWait(driver,3).until(ECS.title_contains('百度')) 
  • 通常在網頁中并不是所有元素都是可見的,也有的是初始化時不可見,加載完成時則狀態又變為可見,所以在元素等待中以下這些方式是經常被用到的。
  1. # 元素等待直到能定位到元素,這里是定位到搜索輸入框 
  2. # 這里定位時不關心元素是否可見,只要是加載到DOM中能定位到即可 
  3. WebDriverWait(driver,3).until(ECS.presence_of_element_located((By.ID,'kw'))) 
  4.  
  5. # 元素等待直到能定位到可見的元素,比如這里定位到搜索按鈕 
  6. # 和上面不同,這里等待的元素除加載DOM中,也必須可見 
  7. WebDriverWait(driver,3).until(ECS.visibility_of_element_located((By.ID,'su'))) 
  8.  
  9. # 元素等待直到能定位到可見的元素,比如這里定位到搜索框 
  10. # 這個方法和上面 `visibility_of_element_located` 使用類似 
  11. WebDriverWait(driver,3).until(ECS.visibility_of((By.ID,value='su'))) 
  12.  
  13. # 元素等待直到通過 `CSS` 定位到至少有一個元素存在,則結束等待 
  14. WebDriverWait(driver,3).until(ECS.presence_of_all_elements_located((By.CSS_SELECTOR,'.uinv'))) 
  15.  
  16. # 這和上一個等待方法類似,主要就是需要元素可見才會結束等待 
  17. WebDriverWait(driver,3).until(ECS.visibility_of_any_elements_located((By.CSS_SELECTOR,'.uinv'))) 
  18.  
  19. # 元素等待直到元素被加載,可以定位到并且元素必須為不可見狀態,才會結束等待 
  20. WebDriverWait(driver,3).until(ECS.invisibility_of_element_located((By.CSS_SELECTOR,'#nwWrap'))) 
  • 在平時使用中,也經常會用到等待的元素包含某些內容來判斷,而且這種方式能適用很多場景
  1. # 元素等待直到定位到指定的元素,并且元素的屬性值中包含指定的字符串 
  2. WebDriverWait(driver,3).until(ECS.text_to_be_present_in_element((By.XPATH,"//*[@id='bottom_layer']/div/p[1]/a"),'關于百度')) 
  3.  
  4. # 這種實現跟上面效果差不多 
  5. WebDriverWait(driver,3).until(ECS.text_to_be_present_in_element_value((By.CSS_SELECTOR,'#su'),'百度一下')) 
  • 下面幾種方式主要是針對下拉框類型的等待,還有可點擊的組件,如超鏈接
  1. # 元素等待直到元素被加載,為可見狀態,并且是可點擊的狀態,才會結束等待 
  2. WebDriverWait(driver,3).until(ECS.element_to_be_clickable((By.XPATH,"//*[@id='bottom_layer']/div/p[1]/a"))).click() 
  3.  
  4. # 元素等待直到元素被加載,可見狀態并且這個元素是被選中的狀態 
  5. # 這種方式我運用于下拉選擇框 
  6. WebDriverWait(driver,3).until(ECS.element_to_be_selected((By.XPATH,"//*[@id='sel']/option[2]"))) 
  7.  
  8. # 元素等待直到元素被加載后,并且元素選中狀態為預期的狀態,才會結束等待 
  9. WebDriverWait(driver,3).until(ECS.element_selection_state_to_be((By.XPATH,"//*[@id='sel']/option[1]"),False)) 
  • 以下是比較特殊的幾種方式,在某些情況下用處很大
  1. # 元素等待直到頁面加載出現 `alert`,出現自己切換過去并將提示內容返回 
  2. WebDriverWait(driver,3).until(ECS.alert_is_present()) 
  3.  
  4. # 其他都是等待加載元素并操作,這種是等待元素被從Dom中移除時,才會觸發結束等待 
  5. WebDriverWait(driver,3).until(ECS.staleness_of(driver.find_element(By.ID,'su'))) 
  6.  
  7. # 這種是頁面有多個Frame時,等待頁面加載直到 `frame1` 可以切換進去,這時就會自動切換到 `frame1` ,然后結束等待 
  8. WebDriverWait(driver,3).until(ECS.frame_to_be_available_and_switch_to_it(frame1)) 

除了上面這些,還有很多其他的方式,這里就不再一一列舉了,大家有興趣可以自己去研究一下,然后寫些小例子實際使用下。

對了,有小伙伴問如果隱性等待和顯性等待都使用了,那它會按哪種方式等待呢?在這里說下,它會按等待時間較長的設置為最終等待時間。

總結

 

好了,今天我們又介紹了下 Selenium 顯性等待元素加載的方式,詳細介紹并列舉了一些常見場景使用的例子,給大家學習參考,后續還會為大家介紹更多。

 

責任編輯:武曉燕 來源: Python技術
相關推薦

2012-07-09 13:21:51

2016-06-30 13:14:09

php繼承開發

2025-02-26 10:49:14

2021-06-18 08:25:42

Java泛型通配符

2010-09-03 11:15:02

CHAPppp

2011-05-11 09:49:32

線程等待SQL Server

2011-03-02 13:12:37

vsftpd配置

2011-08-23 13:16:41

SQLEXPLAIN

2011-03-31 09:32:25

EclipseRefactor

2015-12-24 09:48:40

JavaScriptthis指針深

2017-04-26 11:00:34

Spring BootHelloWorld詳解

2011-08-02 11:07:42

iOS開發 UIWebView

2022-04-26 13:49:18

大數據個人信息營銷

2013-10-22 11:17:30

Google自動搜索

2019-12-03 09:00:59

Oracle數據庫等待事件

2023-03-21 15:36:27

Linux編程

2023-03-30 15:07:57

Linux編程開發

2023-09-05 06:52:42

AMD銳龍處理器

2011-06-23 13:10:39

Python 對象機制

2011-07-20 15:20:14

IPhone AVAudioRec
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩一区二区视频 | 国产一区二区三区在线 | 精品videossex高潮汇编 | 98成人网 | 午夜激情国产 | 九色av| 精精精精xxxx免费视频 | 久久久久国产 | 亚洲精品久久久久久国产精华液 | 欧美一区二 | 国产精品久久二区 | 成人做爰9片免费看网站 | 精品久久久久久久久久久久久久久久久 | 成人一区二区三区在线观看 | 99国产精品久久久久老师 | 国产精品一区二区av | 亚洲福利网 | 国产精品一区二区久久 | 日韩中文字幕免费在线 | 91高清免费观看 | 国产美女视频 | 一区二区三区在线播放 | 99re国产视频 | 日本一区视频在线观看 | 91麻豆产精品久久久久久 | 日本精品一区二区三区四区 | 亚洲精品乱码久久久久久按摩 | 黄色精品 | 日本成人中文字幕在线观看 | 久在线精品视频 | 国产91在线播放 | 日韩在线看片 | 精品国产91 | 午夜爽爽爽男女免费观看 | 国产精品自拍视频 | 麻豆av片 | 四虎影院久久 | 欧美一级片在线播放 | 精品99久久 | 欧美日韩国产在线观看 | 国产区在线视频 |