2017-09-04 12 views
-1

私はPython上でSelenium webdriverを使用してWebページのオートメーションコードを作成しています。しかし、ある時点でCaptchaを求めます。だから、私はjavascriptのダイアログボックスのポップアップを使って手動でcaptchaを入力することに決めました。しかし、私のコードの問題は、実装を成功させるためにはwaitを使用し、wait()の後に自動的に警告ボックスを受け入れることです。キャプチャを入力した後に入力し、このエラーがスローされると、私は押した場合はここでSelenium Pythonのjavascriptダイアログボックスの処理

selenium.common.exceptions.UnexpectedAlertPresentException

は私のコードです -

def captcha(): 
    driver.execute_script("var a = prompt('Enter Captcha', '');document.body.setAttribute('data-id', a)") 
    time.sleep(7) 
    driver.switch_to.alert.accept() 
    driver.find_element_by_id("captcha_code").send_keys(driver.find_element_by_tag_name('body').get_attribute('data-id')) 
    driver.find_element_by_id("captcha_code").send_keys(Keys.RETURN) 

それを改善するために、私はのループが毎秒アラートボックスの有無をチェックしているのに、動作していないこのコードを試しました。

現在

アラートをそして、私は何の警告ボックスが存在しない場合でも、長い時間のためにこれを印刷し続けて -

def captcha(): 
    driver.execute_script("var a = prompt('Enter Captcha', '');document.body.setAttribute('data-id', a)") 
    while EC.alert_is_present(): 
     time.sleep(1) 
     print("Alert Present") 
     try: 
      driver.switch_to.alert.accept() 
     except selenium.common.exceptions.NoAlertPresentException: 
      print("Error Encountered...") 
      continue 
     driver.find_element_by_id("captcha_code").send_keys(driver.find_element_by_tag_name('body').get_attribute('data-id')) 
     driver.find_element_by_id("captcha_code").send_keys(Keys.RETURN) 

それは常に印刷します。

この上の任意のヘルプは理解されるであろう。前もって感謝します。

+0

と評価されますので、関数を返しますがクロムまたはFirefoxを使用していますか? –

+0

Chromeウェブドライブを使用しています。 –

答えて

0

変更

while EC.alert_is_present(): 

while EC.alert_is_present()(driver) : 

EC.alert_is_present()することが常に真

+0

ありがとうございました。 :) –

関連する問題