Mak*_*ich 6 python selenium webdriver selenium-webdriver
我刚刚开始使用 selenium,但在阅读文档后,我无法理解如何正确执行等待(使用 EC),直到 webdriver 识别出作为另一个元素的子元素的元素的存在。
让我解释。我想要一个可以通过两步访问的特定元素:
#find major group
listings = driver.find_element_by_id("new-listings");
#find subelement
checkbox = listings.find_element_by_class_name("listing-category")
Run Code Online (Sandbox Code Playgroud)
没关系,但我想使用 EC 来确保存在checkbox
。我不能使用类似的东西:
checkbox = driver.wait.until(EC.presence_of_element_located(
(By.CLASS_NAME, "listing-category")))
Run Code Online (Sandbox Code Playgroud)
只是因为还有很多其他类似的listing-category
元素。遗憾的是,唯一的定位方法checkbox
是通过嵌套请求,如前面所示(它没有任何 id 或其他任何内容)。
如何正确表达呢?
额外的小问题:一般来说,使用 EC 而不是仅仅命中元素并希望它们已经可用,对性能是否非常不利?99% 的时间我不需要等待元素出现,所以我只是尝试处理浏览器响应速度比平常慢的罕见情况。但我不确定 EC 是否会因为创建事件处理程序等而引入大量开销。
我建议您使用 CSS 选择器一次性完成此任务。您可以使用您所描述的方法,但使用 CSS 选择器,您可以使用单个定位器找到元素的子元素。在这种情况下,CSS 选择器将为#new-listings .listing-category
. 在CSS选择器中,#
表示ID并.
表示类名。两个部分之间的空格表示后代。如果您想要一个孩子(直系后代),您可以使用>
,例如#new-listings > .listing-category
。
对于您关于 EC 和性能的问题,不,它不会减慢速度。它总是立即检查条件是否为真,如果不成立则等待,因此添加等待通常不会有什么坏处。
如果您不熟悉 CSS 选择器,可以阅读以下一些链接并了解它们。它们是非常强大且快速的定位器。
归档时间: |
|
查看次数: |
3594 次 |
最近记录: |