python - 使用 selenium,我怎样才能只找到前 N 个元素以更快地运行?
问题描述
目标是尝试从大型 html 文件中更快地解析出字段。html 的结构不是很好,并且有一万个“div 标签”,没有要搜索的名称/id。我只能搜索带有“普通股票”之类的模式的文本,但所需的字段可能不是第一个。
我用过:
browser = webdriver.Firefox()
browser.get(MyLocalFileName)
browser.find_elements(By.TAG_NAME, "div")
find_elements 花了 5 分钟来解析这个文件。请注意,给出第一个元素的 find_element 可能不包含我需要的字段。但是 find_elements 会花很长时间,而且很浪费。
例如,我试图解析多少股:
相关行:“4601075000 股普通股”
不相关行:“XXX 公司增加流通普通股的股份”
我能以某种方式找到第一个元素(如果不需要的话)循环到“下一个元素”吗?还是我只能“找到前 N 个元素”?
解决方案
您可以考虑将定位器策略更改为 XPath
XPath 提供position()函数,允许您将结果集限制在给定范围内,因此如果您调用find_elements_by_xpath方法,例如:
driver.find_elements_by_xpath("//div/*[position()<=3]")
它只会返回前 3 个 div 对象,而不是扫描整个DOM
更多信息:XPath 运算符和函数
推荐阅读
- angular - Angular 6 动画中的 window.innerHeight 不起作用
- php - 用 PHP 迭代 POST 数据给了我愚蠢的结果
- html - HTML5 画布扫描渐变
- java - JSONMANAGED 参考的问题
- node.js - 如何使用 node.js 读取子目录中的文件?
- reactjs - 使用 React 的 Div 表排序控制/排序
- scikit-learn - 使用 CV 进行递归特征消除不会减少特征数
- c# - 从 DbSet 获取所有实体
具有 IEnumerable 中的属性值 - c# - 将 C# 解决方案结构转储到文本文件
- c# - 如何在asp.net C#中为动态创建的网页创建一个唯一的url?