这是为 Selenium 制作函数的示例WebDriverWait
:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
# Open the website
driver.get('https://ocrdata.ed.gov/flex/Reports.aspx?type=school')
... more code ...
# Custom function for Explicit Wait
# The Export button is available before it is "clickable", need to wait
def find(driver):
export_button = driver.find_element_by_name('ctl00$div$ucReportViewer$btnExport')
if export_button:
try:
export_button.click()
return True
except:
return False
else:
return False
secs = 120
export_button = WebDriverWait(driver, secs).until(find)
我建议将两个元素的存在和可见性记录为单独的变量,并在函数中创建一个 if 语句,如下所示:
# Custom function for Explicit Wait
# The Export button is available before it is "clickable", need to wait
def find(driver):
presence = EC.presence_of_element_located((By.XPATH, '//td[@class="blah blah blah"]'))
visibility = EC.visibility_of_element_located((By.XPATH, '//h1[text() = "yo yo"]'))
if presence and visibility:
try:
# action
return True
except:
return False
else:
return False
secs = 120
export_button = WebDriverWait(driver, secs).until(find)