如何让我的循环检查 if 语句直到满足条件/基本上直到按钮出现在屏幕上?

How to make my loop check the if statement until the condition is met / basically until the button appears on screen?

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from webdriver_manager.chrome import ChromeDriverManager
import time



def runScript():
    browser = webdriver.Chrome(ChromeDriverManager().install())
    playButton = '//*[@id="game-details-play-button-container"]/button'

    browser.get("https://www.facebook.com")
    browser.find_element_by_xpath('//*[@id="right-navigation-header"]/div[2]/ul/li[2]/a').click()
    browser.find_element_by_xpath('//*[@id="login-username"]').send_keys("123")
    browser.find_element_by_xpath('//*[@id="login-password"]').send_keys("abc")
    browser.find_element_by_xpath('//*[@id="login-button"]').click()

    while True:
        if browser.find_element_by_class_name("btn-full-width btn-common-play-game-lg btn-primary-md btn-min-width"):
            browser.find_element_by_xpath(playButton).click()
            break
        else:
            return False
    time.sleep(4)

如何使我的 while 循环语句循环执行该语句,直到我的 if 语句为真? 顺便说一下,我正在使用 Selenium。

这里有几个问题:

  1. 您可以使用 find_elements_by_class_name 而不是 find_element_by_class_name。不同之处在于:如果没有找到这样的元素 find_element 将抛出异常,而 find_elements 将 return 一个 list 的 web 元素。如果匹配,元素退出,它将是 non-empty 列表,而 non-empty 列表被 Python 解释为布尔值 True。否则,如果没有找到元素,它将 return 空列表 解释为布尔值 False.
  2. 由于您通过多个 class 名称定位该元素,因此您应该使用 XPath 或 CSS 选择器,而不是 by_class_name
  3. 你应该使用 find_element(By.CSS_SELECTOR, "value")
    的现代风格而不是 find_element_by_css_selector 通过所有这些和正确的缩进,您的代码可以是这样的:
while True:
    if browser.find_elements(By.CSS_SELECTOR,".btn-full-width.btn-common-play-game-lg.btn-primary-md.btn-min-width"):
        browser.find_element(By.XPATH,playButton).click()
        break
    else:         
        time.sleep(0.5)

您将需要此导入:

from selenium.webdriver.common.by import By