通过expected_conditions判断网页元素是否存在
expected_conditions模块:
-
是Selenium的一个子模块,selenium.webdriver.support.expected_conditions
-
可以对网页上元素是否存在进行判断,一般用于断言或与WebDriverWait配合使用
1 import time 2 from selenium import webdriver 3 from selenium.webdriver.support.wait import WebDriverWait 4 from selenium.webdriver.support import expected_conditions as EC 5 from selenium.webdriver.common.by import By 6 7 8 class Expected_Conditions: 9 # expected_conditions模块用法汇总 10 def __init__(self): 11 self.driver = webdriver.Chrome() 12 self.driver.get("https://www.baidu.com") 13 self.driver.maximize_window() 14 time.sleep(2) 15 # 判断当前页面的title 16 WebDriverWait(self.driver, 2).until(EC.title_is("百度一下,你就知道")) 17 # 判断定位元素 18 element = WebDriverWait(self.driver, 2).until(EC.visibility_of(self.driver.find_element(By.ID, 'kw'))) 19 element.send_keys('中彦引擎') 20 time.sleep(2) 21 22 # 判断当前页面的title是否包含预期字符串,返回布尔值 23 WebDriverWait(self.driver, 10).until(EC.title_contains('new')) 24 25 # 判断当前页面的url是否精确等于预期,返回布尔值 26 WebDriverWait(self.driver, 10).until(EC.url_contains('https://www.baidu.com')) 27 28 # 判断当前页面的url是否包含预期字符串,返回布尔值 29 WebDriverWait(self.driver, 10).until(EC.url_contains('baidu')) 30 31 # 判断当前页面的url是否满足字符串正则表达式匹配,返回布尔值 32 WebDriverWait(self.driver, 10).until(EC.url_matches('.+baidu.+')) 33 34 # 判断元素是否出现,只要有一个元素出现,返回元素对象 35 WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.ID, 'kw'))) 36 37 # 判断元素是否可见,返回元素对象 38 WebDriverWait(self.driver, 10).until(EC.visibility_of(self.driver.find_element(By.ID, 'kw'))) 39 40 # 判断元素是否包含指定文本,返回布尔值 41 WebDriverWait(self.driver, 10).until(EC.text_to_be_present_in_element((By.NAME, 'tj_trnews'), '新闻')) 42 43 # 判断该是否可以switch进去,如果可以的话,返回True并且switch进去 44 WebDriverWait(self.driver, 10, ).until(EC.frame_to_be_available_and_switch_to_it(By.XPATH, '// ')) 45 46 # 判断某个元素是否可见并且是可点击的,如果是的就返回这个元素,否则返回 47 WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable((By.NAME, 'tj_trnews'))) 48 49 # 判断某个元素是否被选中,一般用在下拉列表 50 WebDriverWait(self.driver, 10).until( 51 EC.element_to_be_selected(self.driver.find_element(By.XPATH, '//input[@type="checkbox"]'))) 52 53 # 判断页面上是否存在 54 WebDriverWait(self.driver, 10).until(EC.alert_is_present()) 55 56 self.driver.quit() 57 58 59 if __name__ == "__main__": 60 Expected_Conditions()