使用CSS Selector

时间:2017-06-23 17:18:49

标签: python css 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

这很好用,但是,我想通过CSS Selector确定元素是否存在,而不是ID。参考Selenium文档令我感到困惑。它指出presence_of_element_located方法应采用"定位器"作为一个论点,但是看By文档,我看不出(By.ID, 'id')是一个有效的定位器(虽然很明显,它有效,但我不明白这一点),更具体地说,我不知道如何将其编码为CSS Selector定位器。

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

AttributeError: type object 'By' has no attribute 'cssSelector'

或类似的东西。我在某个地方显然遗漏了一些文档,因为我无法弄清楚为什么IDBy的有效attritube而cssSelector不是。{0}}。我错过了什么?

1 个答案:

答案 0 :(得分:3)

您想使用By.CSS_SELECTOR

对于reference,以下是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"