2016-09-28 7 views
0

Я жду элемент, который мог бы или не отображаться. В какой-то момент, если он не появляется, я хочу, чтобы можно было нажать «enter» и перейти к другой части кода.Могу ли я остановить код, нажав кнопку?

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

driver = webdriver.Firefox() 
driver.get("http://somelink.com") 

Try: 
    element = WebDriverWait(driver, 1500).until(EC.presence_of_element_located((By.ID, 'someid'))) 
    # I want to be able to interrupt the waiting at some point before the 1500 secs. 
except: # if I click on "enter" 
    # some other code 
    pass 

Я не знаю, можно ли использовать try/except, таймеры или вообще невозможно. Я не хочу, чтобы скрипт вышел (как с ctrl + c), а скорее для выполнения другого кода.

Предложения приветствуются.

+0

Не использовали селен, но похоже, что код уже указал, как долго ждать (в вашем случае 1500 секунд). – PQL

+0

@PQL Я хочу быть в состоянии прервать ожидание до 1500 секунд. Пытался использовать переменную: с input() как x: WebDriverWait (driver, x) .until ... который не будет работать. Я ищу обходное решение, за исключением случаев, когда это возможно. – Iber

ответ

0

Если вы хотите, чтобы вас спрашивали, хотите ли вы продолжать регулярные интервалы, в этом случае 15 секунд, и вы хотите использовать исключение (как вы сказали в своем комментарии), тогда следующий код должен работать. Это не самый элегантный, но он делает трюк.

try: 
    while True: 
     try: 
      element = WebDriverWait(driver,15).until(EC.presence_of_element_located((By.ID, 'someid'))) 
      break 
     except Exception as e: 
      do_continue = input("Continue? (y/n)") 
      if do_continue == "n": 
       raise e 
except: 

    print 'Doing other code' 
0

Вы можете обработать это, используя блок Try Catch. Исключение, которое возникает в случае, если элемент не отображается, упоминает об этом исключении в catch, и выполнение будет просто двигаться дальше, если элемент не появляется. Если он появится, напишите код, чтобы обработать этот элемент в блоке Try.

Этот подход можно попробовать, если вы хотите избежать вмешательства вручную.

Смежные вопросы