gpt4 book ai didi

python - Selenium - 等到另一个元素的子元素出现

转载 作者:太空宇宙 更新时间:2023-11-03 15:23:34 24 4
gpt4 key购买 nike

我刚刚开始使用 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")

没关系,但我想使用 EC 来确保 checkbox 存在。我不能使用这样的东西:

checkbox = driver.wait.until(EC.presence_of_element_located(
(By.CLASS_NAME, "listing-category")))

只是因为还有一堆其他类似的 listing-category 元素。遗憾的是,定位 checkbox 的唯一方法是通过嵌套请求,如前面所示(它没有任何 id 或其他任何内容)。

如何正确表达?

额外的小问题:一般来说,使用 EC 而不是仅仅命中元素并希望它们已经可用,对性能是否非常不利? 99% 的时间我不需要等待元素出现,所以我只是尝试处理浏览器响应速度比平常慢的罕见情况。但我不确定 EC 是否会因为创建事件处理程序等而引入大量开销。

最佳答案

我建议您使用 CSS 选择器一次性完成此任务。您可以使用您所描述的方法,但使用 CSS 选择器,您可以使用单个定位器找到元素的子元素。在这种情况下,CSS 选择器将为 #new-listings .listing-category。在 CSS 选择器中,# 表示 ID,. 表示类名。两个部分之间的空格表示后代。如果您想要一个 child (直系后代),您可以使用 >,例如#new-listings > .listing-category

对于您关于 EC 和性能的问题,不,它不会减慢速度。它总是立即检查条件是否为真,如果不是,则等待,因此添加等待通常不会有什么坏处。

如果您不熟悉 CSS 选择器,可以阅读以下一些链接并了解它们。它们是非常强大且快速的定位器。

CSS selector reference

CSS selector tips

Advanced CSS selectors

关于python - Selenium - 等到另一个元素的子元素出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43312955/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com