2016-09-28 10 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、timer、または全く使用できないかどうかわかりません。 私は(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ブロックを使用して処理できます。 case要素で発生する例外は表示されず、catchで例外が記述され、要素が表示されない場合は実行がさらに単純化されます。 これが表示されたら、tryブロックにその要素を処理するコードを記述します。

このアプローチは、手動による操作を避けたい場合に使用できます。

関連する問題