【发布时间】:2019-08-22 15:42:29
【问题描述】:
我正在使用 selenium webdriver 来定位 firefox/win10 中的元素。
网页如下。
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