首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法将selenium waits实现到while语句中?

有没有办法将selenium waits实现到while语句中?
EN

Stack Overflow用户
提问于 2020-10-30 19:31:26
回答 5查看 690关注 0票数 0

我正在编写一个不断循环的脚本,当它检测到页面上的某个元素中有文本时,需要停止。我在selenium python文档中找不到任何关于这样做的帮助,但一定有办法。如果你仍然不明白我需要做什么,这里有一些代码:

代码语言:javascript
复制
While #element is not visible:
   #do stuff
#when element is visible break out of statement and do something else

编辑:我知道我正在寻找的元素的确切文本和确切的xpath。然而,我只是在寻找一个大致的答案,所以我不介意缺少细节的答案。

EN

回答 5

Stack Overflow用户

发布于 2020-10-30 22:25:36

您可以尝试text_to_be_present_in_element expected并实现ExplicitWait,如下所示:

代码语言:javascript
复制
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get(URL)

timeout = <SET MAXIMUM AMOUNT OF TIME IN SECONDS TO WAIT> 
your_text = '<REQUIRED TEXT>'

element = WebDriverWait(driver, timeout).until(EC.text_to_be_present_in_element((By.ID, "<ElementID>"), your_text))

这将在所需文本出现时立即返回元素

票数 0
EN

Stack Overflow用户

发布于 2020-10-30 22:27:51

下面的代码将获得所需的元素,然后循环,直到它被显示(可见)。在循环结束时,您可能希望在检查元素是否显示在循环顶部之前重新获取元素(以防页面发生变化)。

代码语言:javascript
复制
element = driver.find_element_by_XXX(locator)
while not element.is_displayed():
    #do stuff
    element = driver.find_element_by_XXX(locator)
#when element is visible break out of statement and do something else

我还想补充说,您可能希望有一个循环转义,以防元素永远不可见。您可以在进入循环之前获取当前时间,然后在while条件中进行检查,以确保距离开始时间不超过30秒。这样你的脚本就不会陷入无休止的循环。

票数 0
EN

Stack Overflow用户

发布于 2020-11-10 20:04:27

要继续循环并在Selenium检测到页面上的某个元素中有文本时停止,可以使用以下Locator Strategy

代码语言:javascript
复制
while True:
    try:
        WebDriverWait(driver, 5).until(EC.invisibility_of_element((By.XPATH, "element_xpath")))
        #do stuff
        continue
    except:
        break
#do something else
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64607540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档