运行脚本时,脚本会在完成while
循环中的任务之前结束。
driver = webdriver.Chrome()
driver.get('http://example.com')
#input("Press any key to continue1")
s_b_c_status = "False"
while s_b_c_status == "True":
try:
if(driver.find_element_by_xpath("//div[@role='button' and @title='Status']")):
s_b_c_status = "True"
except NoSuchElementException:
s_b_c_status = "False"
if(s_b_c_status == "True"):
print("Scanning Done!")
else:
print("Error")
由于我的网站没有元素,因此应始终打印Error
,但是在我运行代码时,它仅打印Error
一次(尽管在while
循环中进行了检查)。
我真正需要的是 脚本应检查该元素是否存在,直到该元素存在为止,然后运行其余代码。
答案 0 :(得分:4)
您的代码在逻辑上有明显的缺陷:
s_b_c_status = "False"
while s_b_c_status == "True"
您已将s_b_c_status
定义为"False"
,因此您的while
循环甚至不会进行一次迭代...
如果您需要等待元素出现在DOM中,请尝试实现ExplicitWait:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
driver = webdriver.Chrome()
driver.get('http://example.com')
try:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@role='button' and @title='Status']")))
except TimeoutException:
print("Element not found")