硒find_elements_by_id()不会返回所有元素

时间:2020-01-03 00:12:49

标签: python selenium iframe lazy-loading viewport

我正在尝试使用Selenium(python)在网页上查找某种类型的所有元素。为了简单起见,假设其ID为elem_id。我正在使用以下代码片段来做到这一点:

all_elements = driver.find_elements_by_id("elem_id")
print(str(len(all_elements)))

我知道有问题的网页上有大约3000种此类元素,但是每当我打印all_elements的长度时,它总是会打印1000

它确实找到了正确的元素类型(我检查过),但是不知何故,它不能一次找到所有的元素。它还随机选择1000个元素,这意味着它既不选择前1000个也不排除最后1000个。我尝试找出Selenium可以找到多少个元素是否有上限,但似乎没有最大上限。

有人知道为什么硒一次只能找到1000个元素吗?我究竟做错了什么?非常感谢!

1 个答案:

答案 0 :(得分:1)

从根本上来说,您看到的是正确的行为。尽管您知道网页中几乎有3000种这种特定类型的元素,但是:

  • 所有id elem_id 的元素在Viewport
  • 中可能不可见

您可以在How does Selenium click on elements that are 50% on screen and 50% not on screen?

中找到相关的详细讨论
  • 其中某些元素可能位于<iframe> / <frame>标记内,并且 WebDriver 实例在顶级视图中可能看不到这些元素

您可以在Ways to deal with #document under iframe

中找到相关的详细讨论

您可以在How to click on Load More button within Google Trends and print all the titles through Selenium and Python

中找到相关的详细讨论

因此,您只能看到大约3000个奇数元素中的大约1000个元素。