python - Python Selenium 获取可见元素列表太慢
问题描述
我使用 python (3.4) 和 Selenium 来加载网页,并且:首先,获取所有元素;其次,创建一个仅包含可见元素的列表。这是我的代码:
driver = webdriver.Chrome()
driver.maximize_window()
url = "https://www.gazzetta.it/"
driver.get(url)
all_elems = driver.find_elements_by_xpath("//*")
start = datetime.now()
print("Start: {}".format(start))
visible_elems = []
for elem in all_elems:
if elem.is_displayed():
visible_elems.append(elem)
end = datetime.now()
print("End: {}".format(end))
diff = end - start
print("Diff = {}".format(diff))
我的问题是循环需要很长时间(在我这边,大约需要 1 分 20 秒)。我读过类似的问题(Detect user visible elements(only in viewport) by xpath in selenium, Python , How to create a list of all visible elements in a class python),但似乎都没有解决这个特定问题。我知道您可能想知道为什么我需要所有元素,长话短说,我将所有元素上传到数据框中以进行进一步分析。有人可以想办法加快速度吗?谢谢
解决方案
这是我在 google.com 上进行的虚拟测试 10 循环 findElements(by.xpath("//*") 并标记是否显示元素。
Found 88 elements
Duration: 00:00:07.001
Found 88 elements
Duration: 00:00:03.952
Found 88 elements
Duration: 00:00:02.740
Found 88 elements
Duration: 00:00:02.579
Found 88 elements
Duration: 00:00:02.566
Found 88 elements
Duration: 00:00:02.532
Found 88 elements
Duration: 00:00:02.694
Found 88 elements
Duration: 00:00:02.554
Found 88 elements
Duration: 00:00:02.419
Found 88 elements
Duration: 00:00:02.436
我认为结果没有任何问题。
注意:驱动程序隐式时间会影响 findElement(s) 和其他方法。 我记得默认是 500 毫秒,尝试手动更改它。
推荐阅读
- r - ggplot geom_smooth 无法为 lm 方法关闭 se
- mongodb - MongoDB:数组条目的有序匹配
- events - jupyterlab 按钮事件不起作用
- javascript - 为什么我的表单输出 NaN?
- tensorflow - 如何使用 tf.layers 类而不是函数
- pdfbox - 如何使用 PDFBox 从 PDF 文件中删除覆盖?
- c# - 为什么我的 ASP.NET ListBox 没有填充结果?
- python - 如何将两个列表合并到 Python 中的字典中?Dict 和 Zip 不起作用
- r - 使用 mutate() 返回关于无法修改的错误,因为它是一个分组变量
- python-2.7 - 如何在 3D 数组上应用 mean_squared_error