首页 > 解决方案 > 硒给出不同的结果

问题描述

我在 python 中使用 Selenium 时遇到了一些问题。我正在抓取一个页面,并且正在访问父元素的子元素。但是,每次我运行脚本时,并不总能保证我能够得到孩子。

例如,我有:

filters = driver.find_element_by_class_name("classname")

filters_children = filters.find_elements_by_class_name("anotherclassname")

我打印出 filters_children[1] 只是为了确保。

大约 60% 可以正常工作,并且 filters_children 将有一个子元素列表。然而另外 40%,它会有一个 NoneType 所以它不能抓取元素。

我尝试在页面呈现后使用长达 10 秒的睡眠,但这并没有太大帮助。

标签: pythonselenium

解决方案


您的父类可能太宽泛,有时您可能会得到不同的元素,那么您的第二个查询将无法找到合适的子类。

通过 css 选择器搜索时,您可以通过在它们之间使用空格来组合多个嵌套类。然后,您可以将嵌套查询合并为一个。

另外,我建议您在这种情况下使用 wait until 来确保该元素存在。与睡眠相比,这将定期向页面发送请求,直到找到您的请求。

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait

wait = WebDriverWait(driver, '30')
wait.until(EC.presence_of_all_elements_located("css selector", ".classname .anotherclassname")))

如果该元素还需要可见,请将presence_of_all_elements_located更改为visibility_of_any_elements_located


推荐阅读