硒产生不同的结果

时间:2019-03-06 23:08:12

标签: python selenium

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

例如,我有:

filters = driver.find_element_by_class_name("classname")

filters_children = filters.find_elements_by_class_name("anotherclassname")

为了确定,我打印出filters_children [1]。

大约60%会正常工作,并且filter_children将具有children元素列表。但是其他40%的对象将具有NoneType,因此它将无法获取元素。

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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