繁体   English   中英

如何使用 Selenium 和 Python 有条件地退出 while 循环

[英]How to quit while loop conditionally using Selenium and Python

我有一个 while 循环,一切正常,我只想在Marks = driver.find_element_by_xpath("HERE")

我想让它像这样:如果Marks没有显示然后退出循环

while len(driver.find_elements_by_xpath("xxxxx']")) != 1:
    try:
        wait.until(EC.visibility_of_element_located((By.XPATH, "xxxxx']")))
        List = driver.find_element_by_xpath("yyyyyyy")
        List.click()
        print('done1')
        time.sleep(2)
        Marks = driver.find_element_by_xpath("HERE")
edit here
        time.sleep(2)
        Marks.click()
        time.sleep(5)
        print('done3')
        driver.get("qqqqqqq")
        driver.find_element_by_xpath('qqqqqqq').click()
        wait.until(EC.visibility_of_element_located((By.XPATH, "qqqqqqq")))
    except:
        pass

你可以用 try/except 来做。 如果 Marks 不在网页上(Python 无法通过 XPath 找到它),脚本将引发错误。

try:
  Marks = driver.find_element_by_xpath("HERE")
except:
  quit()

从您的代码块中,不清楚为什么要在exceptpass 这意味着您愿意捕捉任何错误,尽管您绝对没有为此做好准备,而且我们也不会对此采取任何措施。

但是,要在Marks没有出现时退出循环,即导致NoSuchElementException ,您现在可以在except块中处理它,如下所示:

while len(driver.find_elements_by_xpath("xxxxx']")) != 1:
    try:
        wait.until(EC.visibility_of_element_located((By.XPATH, "xxxxx']")))
        List = driver.find_element_by_xpath("yyyyyyy")
        List.click()
        print('done1')
        time.sleep(2)
        Marks = driver.find_element_by_xpath("HERE")
        time.sleep(2)
        Marks.click()
        time.sleep(5)
        print('done3')
        driver.get("qqqqqqq")
        driver.find_element_by_xpath('qqqqqqq').click()
        wait.until(EC.visibility_of_element_located((By.XPATH, "qqqqqqq")))
    except NoSuchElementException:
        break
    

注意:您必须添加以下导入:

from selenium.common.exceptions import NoSuchElementException

tl; 博士

为什么“除了:通过”是一种不好的编程习惯?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM