等待元素使用 CSS 选择器加载标识元素

Men*_*ixm 2 css python selenium delay

我正在尝试等待页面中的一些元素加载,然后再继续从页面输入/获取数据。一些阅读使我找到了这种代码:

#including imports in case they are influencing things
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

driver.get('example.com')
try:
    element1_present = EC.presence_of_element_located((By.ID, 'id'))
    WebDriverWait(driver, timeout).until(element1_present)
except TimeoutException:
    print('Timed out waiting for page to load')
#Then get some data from example.com
Run Code Online (Sandbox Code Playgroud)

这工作得很好,但是,我想确定元素是否通过 CSS 选择器而不是 ID 存在。参考 Selenium 文档让我很困惑。它指出该presence_of_element_located方法应该将“定位器”作为参数,但是查看By文档,我没有看到(By.ID, 'id')有效的定位器如何(尽管很明显,它可以工作,但我不明白这一点),更具体地说,我不知道如何将其编码为 CSS 选择器定位器。

我曾尝试By.cssSelector,By.CSS和其他类似的术语来代替By.ID, 并移动括号,但我总是被退回:

AttributeError: type object 'By' has no attribute 'cssSelector'
Run Code Online (Sandbox Code Playgroud)

或者类似的东西。我显然在某处遗漏了一些文档,因为我无法弄清楚为什么ID是有效的属性,BycssSelector不是有效的属性。我错过了什么?

bud*_*udi 6

您想使用By.CSS_SELECTOR.


供您参考,以下是By该类可用的属性:

ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"
Run Code Online (Sandbox Code Playgroud)