Программа завершилась без выполнения задачи - PullRequest
0 голосов
/ 31 августа 2018

Когда я запускаю свой скрипт, он заканчивается перед завершением задачи, которая находится в цикле 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).

Что мне точно нужно: Сценарий должен проверять, есть ли элемент там или нет, пока элемент не будет там, а затем запустить остальной код.

1 Ответ

0 голосов
/ 31 августа 2018

Ваш код имеет очевидный недостаток в логике:

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")
...