selenium 显示等待12种预置条件包括定制等待条件
基础
等待元素可见
例:设置最大等待时间为 15 秒,直到指定元素在页面上可见。
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import ByWebDriverWait(driver, timeout=15).until(EC.element_to_be_clickable((By.ID,'element_id')))
等待元素不可见
例:设置最大等待时间为 15 秒,直到指定元素在页面上不可见。
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import ByWebDriverWait(driver, timeout=15).until(EC.invisibility_of_element_located((By.ID,'element_id')))
等待元素可点击
例:设置最大等待时间为 15 秒,直到指定元素变为可点击状态。
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import ByWebDriverWait(driver, timeout=15).until(EC.element_to_be_clickable((By.ID,'element_id')))
等待文本可见
例:设置最大等待时间为 15 秒,直到指定元素的文本可见。
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import ByWebDriverWait(driver, timeout=15).until(EC.text_to_be_present_in_element((By.ID,'element_id'),'Expected_Text'))
等待文本在元素里可见
例:设置最大等待时间为 15 秒,直到指定文本在元素的值中可见。
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import ByWebDriverWait(driver, timeout=15).until(EC.text_to_be_present_in_element_value((By.ID,'frame_id'),"Expected_Title"))
等待元素存在
例:设置最大等待时间为 15 秒,直到指定元素存在 DOM 中。
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import ByWebDriverWait(driver, timeout=15).until(EC.presence_of_element_located((By.ID,'element_id')))
等待元素消失
例:设置最大等待时间为 15 秒,直到指定元素从 DOM 中移除。
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import ByWebDriverWait(driver, timeout=15).until(EC.staleness_of(driver.find_element(By.ID,'element_id')))
URL 包含
例:设置最大等待时间为 15 秒,直到当前 URL 包含某个特定字符串。
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import ByWebDriverWait(driver, timeout=15).until(EC.url_contains('expected_substring'))
标题包含
例:设置最大等待时间为 15 秒,直到当前页面标题包含某个字符串。
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import ByWebDriverWait(driver, timeout=15).until(EC.title_contains('Expected Title')))
窗口可见
例:设置最大等待时间为 15 秒,直到新窗口出现并可见。
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import ByWebDriverWait(driver, timeout=15).until(EC.new_window_is_opened(driver.window_handles))
等待切换iframe
例:设置最大等待时间为 15 秒,直到切换到某个 iframe 元素里。
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import ByWebDriverWait(driver, timeout=15).until(EC.frame_to_be_available_and_switch_to_it((By.ID,'frame_id')))
高级
自定义条件等待 JavaScript 执行
等待 JavaScript 执行结果返回预期值。
from selenium.webdriver.support.wait import WebDriverWaitWebDriverWait(driver, timeout=wait_time).until(lambda driver: driver.execute_script('return document.readyState') == 'complete')
更改代码检查条件的频率
例:设置每隔 2 秒检查一次条件,总超时为 15 秒,直到页面加载完成。
from selenium.webdriver.support.wait import WebDriverWaitWebDriverWait(driver, timeout=15, poll_frequency=2).until(lambda d: d.execute_script("return document.readyState") == "complete")
指定应自动处理哪些异常
例:在等待期间自动忽略 NoSuchElementException
异常,直到找到特定元素或超时。
from selenium.webdriver.support.wait import WebDriverWait
from selenium.common.exceptions import NoSuchElementExceptionWebDriverWait(driver, timeout=15, ignored_exceptions=[NoSuchElementException]).until(lambda d: d.find_element(By.ID, "element_id"))
更改总超时长度
例:设置最大等待时间为 15 秒,直到找到特定元素。
from selenium.webdriver.support.wait import WebDriverWaitWebDriverWait(driver, timeout=15).until(lambda d: d.find_element(By.ID, "element_id"))
自定义超时消息
例:如果页面未在 10 秒内加载完成,捕获 TimeoutException
并打印自定义超时消息。
from selenium.webdriver.support.wait import WebDriverWait
from selenium.common.exceptions import TimeoutExceptiontry:WebDriverWait(driver, timeout=15).until(lambda d: d.execute_script("return document.readyState") == "complete")
except TimeoutException:print("页面加载超时,请检查网络连接。")