我正在编写一个不断循环的脚本,当它检测到页面上的某个元素中有文本时,需要停止。我在selenium python文档中找不到任何关于这样做的帮助,但一定有办法。如果你仍然不明白我需要做什么,这里有一些代码:
While #element is not visible:
#do stuff
#when element is visible break out of statement and do something else编辑:我知道我正在寻找的元素的确切文本和确切的xpath。然而,我只是在寻找一个大致的答案,所以我不介意缺少细节的答案。
发布于 2020-10-30 22:25:36
您可以尝试text_to_be_present_in_element expected并实现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))这将在所需文本出现时立即返回元素
发布于 2020-10-30 22:27:51
下面的代码将获得所需的元素,然后循环,直到它被显示(可见)。在循环结束时,您可能希望在检查元素是否显示在循环顶部之前重新获取元素(以防页面发生变化)。
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秒。这样你的脚本就不会陷入无休止的循环。
发布于 2020-11-10 20:04:27
要继续循环并在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 elsehttps://stackoverflow.com/questions/64607540
复制相似问题