【问题标题】:selenium webdriver takes very long when not finding an element in firefox在 Firefox 中找不到元素时,selenium webdriver 需要很长时间
【发布时间】:2019-08-22 15:42:29
【问题描述】:

我正在使用 selenium webdriver 来定位 firefox/win10 中的元素。
网页如下。

https://24h.pchome.com.tw/

html源文档中有一个iframe标签,可以通过以下两个xpath访问其元素。

"//iframe[@src='https://www.googletagmanager.com/ns.html?id=GTM-TKSM5PF']"

'//html/body/noscript[1]/iframe[1]'

然后我使用以下 python 语句为上述每个 xpath 定位元素一次。

e = WebDriverWait(driver, 1).until(EC.visibility_of_element_located((By.XPATH, xPath)))         

情况是当一个标签可以定位到时,webdriver会快速返回该元素。但是对于上述元素,不知何故 webdriver 无法找到它,并且需要大约 5 分钟才能返回。
如您所见,该位置的等待时间设置为 1 秒。但实际上,它需要大约 5 分钟。

如果有人能告诉我如何在定位元素失败时让 webdriver 快速返回,我将不胜感激。

谢谢!

农场

【问题讨论】:

  • 你有没有使用过driver.manage().timeouts().implicitlyWait(5, TimeUnit.MINUTES);?代码中的任何位置。
  • 是的,但仅当隐式等待设置为 0 时。否则它们会混合到意外结果。
  • 这是 Java 代码,在 Python 中是 driver.implicitly_wait(300)。我不是建议你使用它,我是在问你是否已经在使用它,它可能是这种行为的根源。它不必在WebDriverWait 之前,它可以在代码中的任何位置。
  • 您使用了visibility_of_element_located,这意味着iframe 不可见或根本无法定位。它花费了隐式等待的全部时间,所以我怀疑是后者。顺便说一句,您可以将frame_to_be_available_and_switch_to_it 用于框架。
  • 查看您正在寻找的这个iframe 的站点并不是真正的iframe,它只是一个占位符,以防JavaScript 被禁用,并且它不包含任何内容。

标签: selenium firefox xpath webdriver


【解决方案1】:

抱歉这个愚蠢的问题。正如 Guy 所建议的那样,这是因为 webdriverwait.until 语句干扰了在其他地方声明的 implicitly_wait() 语句。更改implicitly_wait语句后,问题就消失了。

【讨论】:

    猜你喜欢
    • 2018-01-17
    • 2014-08-17
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    • 2018-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多