Selenium - expected_conditions(预期条件)
expected_conditions
expected_conditions预期条件,封装了各种场景判断,例如说判断某个元素是否可见,是否存在,常搭配等待或者在断言中使用。
常用方法:
方法 | 描述 | 备注 |
---|---|---|
EC.element_to_be_clickable | 判断一个元素是否可以点击 |
这两个方法都是用来判断title的,区别是:
1、EC.title_contains只要包含即可
2、EC.title_is必须完全匹配
#!/usr/bin/env python # -*- coding: utf-8 -*- __author__ = 'tian' __data__ = '2023/2/1 9:15' # software: PyCharm import time from selenium import webdriver from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.maximize_window() driver.implicitly_wait(10) driver.get("https://www.baidu.com") # title中只要包含即可 print(EC.title_contains("百度")(driver)) # True print(EC.title_contains("必应")(driver)) # False # title必须完全匹配 print(EC.title_is("百度一下")(driver)) # False print(EC.title_is("百度一下,你就知道")(driver)) # True time.sleep(5) driver.quit()
EC.visibility_of_element_located/EC.presence_of_element_located
这俩都是判断元素是否存在,但是区别还是有的:
1、EC.visibility_of_element_located,我们需要找到元素,并且该元素也可见;
2、EC.presence_of_element_located,我们不关心元素是否可见,只关心元素是否存在在页面中;
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() wait = WebDriverWait(driver, timeout=3) driver.maximize_window() driver.get("https://www.baidu.com") try: # id:su 存在,不报错 wait.until(EC.visibility_of_element_located((By.ID, "su")), "No search element") except Exception as error: print(111111, error) try: # id:sux不存在,报错 wait.until(EC.presence_of_element_located((By.ID, "sux")), "No search element") except Exception as error: print(222222, error) driver.quit()
EC.element_to_be_clickable
有些网站上,每当输入值并点击确认后,input框会有一个短暂的disabled的状态,即不可选中,但该元素还存在,只是无法选中,也就无法输入值,所以,在反复往该input中输入值的时候,要提前判断该元素是否是可以点击,这里用了EC.element_to_be_clickable来判断元素是否可点击,具体示例如下:
import random import time from selenium import webdriver from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.maximize_window() wait = WebDriverWait(driver=driver,timeout=10) driver.get("https://www.cs.usfca.edu/~galles/visualization/BTree.html") try: for i in random.sample(range(500),50): wait.until(EC.element_to_be_clickable((By.XPATH,'//*[@id="AlgorithmSpecificControls"]/td[1]/input'))).send_keys(i) wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="AlgorithmSpecificControls"]/td[2]/input'))).click() time.sleep(2) except Exception as error: print(error) finally: time.sleep(10) driver.quit()