1
wait = (driver, 10)
wait.until(EC.presence_of_element_located((By.XPATH, '//td[@class="blah blah blah"]')))
wait.until(EC.visibility_of_element_located((By.XPATH, '//h1[text() = "yo yo"]')))

有没有办法将这两个条件组合成一行,或者以任何方式表示如果这两个条件都为真,那么在 Python 中的 Selenium 中只有 click()。

4

1 回答 1

2

这是为 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)
于 2020-05-15T17:23:11.957 回答