做爲一個剛剛轉到python開發的小朋友,在開發前只將前輩們封裝的方法看了一遍,學了一邊selenium基礎。看到封裝的方法有什麼判斷元素是否存在、判斷元素是否可見,而在基礎知識中根本不存在,一臉懵逼。python
直到寫爬蟲案例的時候,忽然發現了selenium下的一個模塊吸引了我,由於我在其餘開發中根本沒有碰到這個模塊,因此我就去了解了一下,而後就有了這篇博客。web
selenium的expected_conditions模塊通常也簡稱EC,收集了一系列的場景判斷方法。dom
expected_condtions提供了16種判斷頁面元素的方法。url
咱們就用百度首頁來進行演示吧(想不到什麼網頁)。spa
前面代碼都同樣,因此我就寫在前面了。code
#coding=utf-8 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait base_url = "http://www.baidu.com" driver = webdriver.Firefox() driver.implicitly_wait(5) # 隱式等待和顯示等待都存在時,超時時間取兩者中較大的 driver.get(base_url)
title_is():判斷當前頁面的title是否徹底等於預期字符串,返回布爾值blog
demo = WebDriverWait(driver,10).until(EC.title_is(u"百度一下,你就知道")) print("判斷title,返回布爾值:",demo)
結果:utf-8
title_contains():判斷當前頁面的title是否包含預期字符串,返回布爾值 ci
demo = WebDriverWait(driver,10).until(EC.title_contains(u"百度一下")) print("判斷title,返回布爾值:",demo)
結果:element
presence_of_element_located():判斷某個元素是否被加到dom樹下,不表明該元素必定可見
demo = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,'kw'))) '''判斷某個元素是否被加到了dom樹裏,並不表明該元素必定可見,若是定位到就返回WebElement''' print(demo)
結果:
visibility_of_element_located():判斷某個元素是否可見,可見表明元素非隱藏,而且元素的寬和高都不爲0
demo = WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.ID,'su'))) '''判斷某個元素是否被添加到了dom裏而且可見,可見表明元素可顯示且寬和高都大於0''' print(demo)
結果:
visibility_of():判斷元素是否可見,若是可見就返回這個元素
demo = WebDriverWait(driver,10).until(EC.visibility_of(driver.find_element(by=By.ID,value='kw'))) '''判斷元素是否可見,若是可見就返回這個元素''' print(demo)
結果:
presence_of_all_elements_located():判斷是否至少一個元素存在於dom樹中,舉個例子,若是頁面上有n個元素的class都是'coumn-md-3',name只要有一個元素存在,這個方法就返回True
demo = WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,'.mnav'))) '''判斷是否至少有1個元素存在於dom樹中,若是定位到就返回列表''' print(demo)
結果:
text_to_be_present_in_element_value():判斷某個元素中的value屬性值是否包含了預期字符串
demo = WebDriverWait(driver,10).until(EC.text_to_be_present_in_element_value((By.CSS_SELECTOR,'#su'),u'百度一下')) '''判斷指定元素的屬性值中是否包含了預期的字符串,返回布爾值''' print(demo)
結果:
text_to_be_present_in_element():判斷某個元素中的text文本是否包含預期字符串
demo = WebDriverWait(driver,10).until(EC.text_to_be_present_in_element((By.XPATH,"//*[@id='u1']/a[8]"),u'設置')) '''判斷指定的元素中是否包含了預期的字符串,返回布爾值''' print(demo)
結果:
frame_to_be_availabe_and_switch_to_it():判斷該frame是否能夠switch進去,若是能夠,則返回True而且switch進去,不然返回False (沒找到例子)
invisibility_of_element_located():判斷某個元素是否不存在於dom樹或不可見
demo = WebDriverWait(driver,10).until(EC.invisibility_of_element_located((By.CSS_SELECTOR,'#swfEveryCookieWrap'))) '''判斷某個元素在是否存在於dom或不可見,若是可見返回False,不可見返回這個元素''' #注意#swfEveryCookieWrap在此頁面中是一個隱藏的元素 print(demo)
結果:
element_to_be_clickable():判斷某個元素是見而且是enable(有效)的,這樣的話才叫clickable
demo = WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//*[@id='u1']/a[8]"))).click() '''判斷某個元素中是否可見而且是enable的,表明可點擊''' print(demo)
結果:
staleness_of():等某個元素從dom樹下移除,返回True或False(沒找到例子)
element_to_be_selected:判斷某個元素是否被選中,通常用於select下拉表(沒找到例子)
element_selection_state_to_be:判斷某個元素的選中狀態是否符合預期(沒找到例子)
element_located_selection_state_to_be:跟上面的方法同樣,只是上面的方法傳入定位到的element,這個方法傳入locator(沒找到例子)
alert_is_present:判斷頁面上是會否存在alert(沒找到例子)