【问题标题】:Selenium takes 30s to realize an element id doesn't exist. What should I do?Selenium 需要 30 秒才能实现元素 ID 不存在。我应该怎么办?
【发布时间】:2014-04-05 07:48:20
【问题描述】:

我正在使用 Selenium 抓取/解析一个糟糕的网站(如果它不糟糕,我可能不会使用 Selenium,是的,尊重 robots.txt)。

我正在使用 find_element_by_id() 从一个大小未知的表中读取一组链接,这些链接具有顺序元素 ID。我正在赶上NoSuchElementException,告诉我我在桌子的最后,没有其他元素可以选择。

这会顺利遍历存在的元素,但是当我请求告诉我我在表格末尾的不存在元素时,大约需要 30 秒才能引发错误。

文件并不大 - 来自 DOM Inspector 的 html 转储文件提供了一个 81kb 的文件。表中的最后一个链接(Selenium 可以快速找到)是文件的 7/8 秒,因此(假设 Selenium 是按顺序解析)文件大小本身似乎无法解释这一点。

能否加快查找缺失元素的失败速度?或者有没有更优雅的方式来知道我在表格的最后一行有内容?

【问题讨论】:

  • 例如我可以使用通配符一次获取所有匹配元素吗?它们看起来像 blah_blah_21_blah_blah,其中 21 是第 21 个元素。
  • 你的代码中有driver.implicitly_wait(30)这一行
  • 是的,通配符匹配。按 css 选择器搜索。示例find_elements_by_css_selector("[id^='blah_blah']")
  • @Amey,是的,我知道 - 我想这意味着每次我请求不存在的元素时,它都在等待查看是否会加载更多页面?

标签: python-2.7 selenium


【解决方案1】:

您可能希望使用 css 选择器来代替。

driver.findElements( By.cssSelector( '[id^=id_name]' ) )

【讨论】:

  • find_elements_by_css_selector 和 findElements(By.cssSelector()) 有什么区别?第二个引发了错误,但也许我没有导入 FindElements 函数 - 不知道在哪里找到它。
  • @pnj findElements 是 java 语法,find_elements_by_css_selector 是 python 语法。
猜你喜欢
  • 2017-03-05
  • 2019-08-25
  • 1970-01-01
  • 1970-01-01
  • 2014-10-13
  • 2013-11-14
  • 1970-01-01
  • 2021-11-06
相关资源
最近更新 更多