当for循环中没有匹配项时退出Python脚本。

3
使用 Python 中的 Selenium,如果一个 HTML div 标签包含某些关键词,我希望能够点击它,如果没有找到任何关键词,则脚本必须退出。下面的代码可以正常工作,如果有一个 div 包含了 text 列表中的一个单词,但是如果找不到任何一个单词,该如何退出呢?在下面的代码中,order.click() 是在循环之外执行的,因此它会执行。我只想在找到关键词后执行 order.click() 并继续执行脚本的其余部分,否则就退出循环。
    text = ["Dog", "Cat", "Bird"]

    for word in text:
        try:
            order = WebDriverWait(driver,5).until(EC.presence_of_element_located((By.XPATH, "//div/p[contains(text(),'{}')]".format(word))))
            if order != None:
                print(f"found div with word: {word}")
                break
        except:
            print(f"did NOT found div with word: {word}")

    order.click()
 
  # and more commands after this....

2个回答

2
import sys

在except中:
    text = ["Dog", "Cat", "Bird"]
    is_found = False
    for word in text:
        try:
            order = WebDriverWait(driver,5).until(EC.presence_of_element_located((By.XPATH, "//div/p[contains(text(),'{}')]".format(word))))
            if order != None:
                print(f"found div with word: {word}")
                is_found = True
                break
        except:
            print(f"did NOT found div with word: {word}")

    if is_found == False:
        sys.exit()
    order.click()
 
  # and more commands after this....

如果您想退出整个脚本,请执行以下操作。

如果您只是想不运行order.click(), 那么请将此行移至您的try范围内:

try:
            order = WebDriverWait(driver,5).until(EC.presence_of_element_located((By.XPATH, "//div/p[contains(text(),'{}')]".format(word))))
            if order != None:
                print(f"found div with word: {word}")
                order.click()
                break

谢谢,但现在脚本会立即关闭,一旦第一个单词未找到而不检查其他两个。它所要做的是仅在找不到任何单词时关闭脚本。如果找到Bird但没有带有Dog或Cat的div,则必须执行order.click。 - Coen17st
已经收到你的问题,刚刚编辑了答案。 - Etch
非常感谢!这会解决问题 :) - Coen17st

1

我认为你需要在检查项目是否在列表中的缩进代码部分中包括"order.click()",如下所示。

text = ["Dog", "Cat", "Bird"]

for word in text:
    try:
        order = WebDriverWait(driver,5).until(EC.presence_of_element_located((By.XPATH, "//div/p[contains(text(),'{}')]".format(word))))
        if order != None:
            print(f"found div with word: {word}")
            order.click()
            break
    except:
        print(f"did NOT found div with word: {word}")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接