2016-10-18 9 views
0

を消えた後、私は私が1〜2日間解決しようとしてきた当面の問題のいくつかの考えを申し上げ応答を停止します。セレンFireFoxのドライバーは、ポップアップが

私は、Firefox 49.0.1上のセレン2.53.6でPythonスクリプトを実行しています。スクリプトは、ページ上の一連のドキュメントダウンロードリンクをクリックすることになっています(私は、これらのファイルタイプを開くのではなく、自動的にダウンロードするようにブラウザを設定しています)。クリックすると、次の2つのイベントのいずれかが展開されます。

  1. ポップアップウィンドウが表示されます。ドキュメントをダウンロードする前に、ポップアップウィンドウのボタンをクリックして閉じる必要があります。
  2. ドキュメントのダウンロードが開始されたとき、それは自分自身で消える前に空白のポップアップが一瞬表示されます。

    file_link = tr.find_element_by_xpath('td[5]/a') 
    file_link.click() 
    time.sleep(7) # Allows the blank pop-up to disappear automatically under Event2 
    
    agree_button = None 
    
    # Checks for the pop-up window 
    try: 
        print "Step 1" 
        driver.switch_to.window(driver.window_handles[1]) 
        print "Step 2" # SCRIPT STOPS RUNNING HERE 
        agree_button = driver.find_element_by_xpath('//input[@value="Agree and proceed"]') 
        print "Popup found" 
    except: 
        driver.switch_to.window(driver.window_handles[0]) 
    
    # Clicks the button if the pop-up window is found  
    if agree_button is not None: 
        agree_button.click() 
        print "Button clicked" 
    

    通常の状況下では、イベント2のネットワークで長い待ち時間があるのですトラブル表面を、空白ポップ:ここ

は、上記のイベントを処理するために書かれたスクリプトの抜粋ですほぼ即座に消えてダウンロードがすぐに始まります。ただし、ネットワークが遅い場合、空白のポップアップは割り当てられた7秒を超えて持続し、その結果、ポップアップウィンドウが消える前にスクリプトが「ステップ2」に実行されます。

不思議なことは、この時点でスクリプトがagree_buttonを探すために続行されません。そうであれば、例外が発生し、元のウィンドウに戻ってステップを再開することができます。スクリプトは単に停止し、それは何も表示されません。お時間の人たちのために事前に

ありがとう!

+0

は、ポップアップのagree_buttonですか? – Raza

答えて

0

ポップアップが消えるまで待っている上維持する必要があります。これを行う方法の1つは、コード内で以下のように変更することです。

file_link = tr.find_element_by_xpath('td[5]/a') 
file_link.click() 
time.sleep(7) # Allows the blank pop-up to disappear automatically under Event2 

agree_button = None 

# Checks for the pop-up window 
try: 
    print "Step 1" 
    driver.switch_to.window(driver.window_handles[1]) 
    print "Step 2" # SCRIPT STOPS RUNNING HERE 
    while True: 
     agree_button = driver.find_element_by_xpath('//input[@value="Agree and proceed"]') 
     if agree_button is not None: 
      break 
     else: 
      sleep(7) 
    print "Popup found" 
except: 
    driver.switch_to.window(driver.window_handles[0]) 

# Clicks the button if the pop-up window is found  
if agree_button is not None: 
    agree_button.click() 
    print "Button clicked" 
+0

私のオリジナルの記事で説明したように、2種類のポップアップイベントがあります.1つはagree_buttonがあり、もう1つはwithoutです。私の問題は、agree_buttonを持たないポップアップウィンドウの遅れが原因です。あなたの提案は、要素の欠落のために最初にSelenium例外を引き起こさない限り、無限ループに終わります。 – kerwei

関連する問題