如何让我的循环检查 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。
这里有几个问题:
- 您可以使用
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
.
- 由于您通过多个 class 名称定位该元素,因此您应该使用 XPath 或 CSS 选择器,而不是
by_class_name
- 你应该使用
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
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。
这里有几个问题:
- 您可以使用
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
. - 由于您通过多个 class 名称定位该元素,因此您应该使用 XPath 或 CSS 选择器,而不是
by_class_name
- 你应该使用
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