在将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秒钟的睡眠,但这并没有太大帮助。
答案 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