Условно, если элемент находится на обновлении сайта, а если нет, переходите к коду - PullRequest
0 голосов
/ 11 мая 2019

Я пытаюсь заставить это условно работать, но я получаю трассировку.Я хочу посмотреть, присутствует ли элемент на веб-сайте и обновлен ли он и выполнить redeem_func(), а если элемент вообще отсутствует, я хочу не выполнять err_reddem_func() и перейти к этому. Кстати, я нене знает, имеет ли это отношение, но если на веб-странице не было ошибок, он перенаправляет на сайт последнего шага и сохраняет URL-адрес в txt.

Exception in thread Thread-6:
Traceback (most recent call last):
  File "C:\Users\lulu\AppData\Local\Programs\Python\Python37-32\lib\threading.py", line 917, in _bootstrap_inner
    self.run()
  File "C:\Users\lulu\AppData\Local\Programs\Python\Python37-32\lib\threading.py", line 865, in run
    self._target(*self._args, **self._kwargs)
  File "c:/Users/lulu/Desktop/s/s/threaddo.py", line 352, in execute_chrome
    s(elem[0], elem[1], elem[2])
  File "c:/Users/lulu/Desktop/s/s/threaddo.py", line 323, in s
    err_redeem_func()
  File "c:/Users/lulu/Desktop/s/s/threaddo.py", line 314, in err_redeem_func
    err_redeem = driver.find_element_by_class_name('error')
  File "C:\Users\lulu\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 564, in find_element_by_class_name    return self.find_element(by=By.CLASS_NAME, value=name)
  File "C:\Users\lulu\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 978, in find_element
    'value': value})['value']  File "C:\Users\lulu\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\Users\lulu\AppData\Local\Programs\Python\Python37-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"class name","selector":"error"}  (Session info: chrome=74.0.3729.131)
  (Driver info: chromedriver=74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}),platform=Windows NT 10.0.17763 x86_64)

Мой код

def redeem_func():
        capHome = cap_home()
        print("redeem_func")
        driver.execute_script("redemptionValidation(\"" + capHome + "\")")
        time.sleep(10)


    redeem_func()
    time.sleep(1)
    print(driver.current_url)

    def err_redeem_func():
        err_redeem = driver.find_element_by_class_name('error')
        try:
            if err_redeem.is_displayed() and err_redeem.is_enabled():
                driver.refresh()
                redeem_func()
        except NoSuchElementException:
            pass


    err_redeem_func()

    print(driver.current_url)
    print("SAVING TO TXT")
    finalCode = driver.current_url
    f = open('t.txt','a')
    f.write('\n' + finalCode)
    f.close()

1 Ответ

1 голос
/ 11 мая 2019

Замените следующую строку

if err_redeem.is_displayed() and err_redeem.is_enabled():

на

if (len(driver.find_elements_by_class_name('error'))>0):

Вы получаете исключение NoSuchElement, потому что скрипт пытается проверить, включен ли элемент, когда элемент отсутствуетстраницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...