我正在编写一个不断循环的脚本,当它检测到页面上某个元素中存在文本时,将需要停止该脚本。我在硒python文档中找不到有关此操作的任何帮助,但必须有一种方法。如果您仍然不明白我该怎么做,下面是一些代码:
While #element is not visible:
#do stuff
#when element is visible break out of statement and do something else
编辑:我知道我要查找的元素的确切文本和确切xpath。但是,我只是在寻找一般的答复,因此我不介意缺少细节的答案。
答案 0 :(得分:0)
您可以尝试text_to_be_present_in_element
的预期条件并实施ExplicitWait,如下所示:
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))
这将在出现所需文本后立即返回元素
答案 1 :(得分:0)
下面的代码将获取所需的元素,然后循环直到其显示(可见)。在循环结束时,您可能希望先重新获取元素(以防页面更改),然后再检查其是否显示在循环的顶部。
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秒。这样,您的脚本就不会陷入无限循环中。
答案 2 :(得分:0)
要继续循环并在Selenium检测到页面上的某个元素中有文本时停止,可以使用以下Locator Strategy:
while True:
try:
WebDriverWait(driver, 5).until(EC.invisibility_of_element((By.XPATH, "element_xpath")))
#do stuff
continue
except:
break
#do something else
答案 3 :(得分:-1)
我正在用C#编写Selenium,但实际上并没有在while循环中使用它,但是我正在使用隐式等待来进行测试,直到我要查找的元素可用为止。该函数很容易编写,但是我不确定这是否对您有用。
_ = driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(30);
基本上,这是硒等待直到元素可用或总共30秒,然后如果元素不可用则测试失败。
答案 4 :(得分:-2)
尝试以下代码,这一定会对您有所帮助。
from selenium import webdriver
driver = webdriver.Chrome(executable_path=r'/path/chromedriver')
driver.get('https://example.com')
condition = driver.find_element_by_<METHOD>('<|Element|>')
while not condition:
<<..yourWork..>>