python - 硒给出不同的结果
问题描述
我在 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 秒的睡眠,但这并没有太大帮助。
解决方案
您的父类可能太宽泛,有时您可能会得到不同的元素,那么您的第二个查询将无法找到合适的子类。
通过 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
推荐阅读
- c# - 微服务之间的 Service Fabric wcf 通信
- javascript - Firestore 将函数返回添加到数据库
- ios - Swift Segue - 当现有的过渡或演示发生时;导航堆栈将不会更新
- python - 将json数据的特定元素转换为python对象
- node.js - Firebase CORS 策略仅针对某些功能阻止
- spring-webflux - Reactor 框架与组装时间和订阅时间混淆(何时调用订阅)
- python-3.x - 如何根据列表列表检查列表列表并计算它们的重叠?(Python)
- reinforcement-learning - OpenAI 健身房 GuessingGame-v0 可能的解决方案
- javascript - 如何在反应中更改按钮标签的语言?
- python - ModuleNotFoundError - Python 模块组织