我正在尝试等待页面中的一些元素加载,然后继续从页面输入/获取数据。有些阅读让我想到了这种代码:
#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.cssSelector
,By.CSS
和其他类似的术语代替By.ID
,并且移动了括号,但我总是被退回:
AttributeError: type object 'By' has no attribute 'cssSelector'
或类似的东西。我在某个地方显然遗漏了一些文档,因为我无法弄清楚为什么ID
是By
的有效attritube而cssSelector
不是。{0}}。我错过了什么?
答案 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"