在Python 3.4中使用Selenium WebDriver。
我正在编写一个scraper,并使用相对于某些非根祖先元素的XPath定位元素,如下所示:
ancestor_element = driver.find_element_by_xpath(ancestor_xpath)
child_element = ancestor_element.find_element_by_xpath(child_xpath)
这可以按预期工作。但是,我不确定如何使用显式等待调用来执行此相对位置,因为我看到的示例使用此语法:
child_element = WebDriverWait(driver,10).until(
EC.presence_of_element_located((By.XPATH, child_xpath))
)
似乎是针对页面根目录评估XPath,并抛出一个错误,抱怨XPath字符串的“.//”开头。
对此有何建议?
答案 0 :(得分:0)
有同样的问题,请按照@Ron Norris的评论中的lambda
示例进行操作。但是,即使使用child_element
,文档也不清楚如何找到与ancestor_element
相对的lambda
。
您实际上可以使用driver
替换WebDriverWait
来电中的ancestor_element
,以明确仅搜索ancestor_element
下的内容(即使文档字符串指出它必须是WebDriver
的一个实例,我发现WebElement
也有效。
所以我结束了类似的事情:
child_element = WebDriverWait(ancestor_element,10).until(
EC.presence_of_element_located((By.XPATH, child_xpath))
)
如果您想使用lambda
,则可以执行以下操作:
child_element = WebDriverWait(ancestor_element,10).until(
lambda x: x.find_element_by_xpath(child_xpath)
)