首页 > 解决方案 > 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),但似乎都没有解决这个特定问题。我知道您可能想知道为什么我需要所有元素,长话短说,我将所有元素上传到数据框中以进行进一步分析。有人可以想办法加快速度吗?谢谢

标签: pythonselenium

解决方案


这是我在 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 毫秒,尝试手动更改它。


推荐阅读