2017-10-17 21 views
0

https://www.mastercard.us/en-us/consumers/get-support/convert-currency.htmlでCurrency ConverterをPythonで自動的に実行しようとしています。ここで私はこれまで得たものである:Selenium Pythonで空でない入力フィールドを待つ方法

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

link1 = 'https://www.mastercard.us/en-us/consumers/get-support/convert-currency.html' 

driver1 = webdriver.PhantomJS() 
driver1.get(link1) 

script = """ var select = arguments[0]; 
      for(var i = 0; i < select.options.length; i++) { 
       if(select.options[i].value == arguments[1]) { 
       select.options[i].selected = true; 
       } 
      } 
     """ 

driver1.find_element_by_id('getDate').send_keys('05-Sep-2017')                           

select = driver1.find_element_by_id('firstID')                               
driver1.execute_script(script, select, 'USD');                                                                        

driver1.find_element_by_name('txtTAmt').send_keys('1.00')                            
driver1.find_element_by_name('txtBankFee').send_keys('0.00')                                                                     

select = driver1.find_element_by_id('newID')                               
driver1.execute_script(script, select, 'EUR');                                                                        

driver1.find_element_by_id('btnSubmit').click()                                                                        

wait = WebDriverWait(driver1, 100)                                  
element = wait.until(EC.presence_of_element_located((By.XPATH,                                 
        '//*[@name="txtCardAmt" and text() != ""]')))                       
print(element.text) 

問題は、フィールド「txtCardAmtは」人口れることは決してありませんし、私はタイムアウト例外を取得していますということです。私の質問は、どのようにサーバーが計算を完了するのを待つことができるのですか?

PS:Selectクラスを使用してオプションを選択する簡単な方法があることはわかっていますが、このウェブサイトでは何らかの理由で機能しません。

+0

、 "txtCardAmt")、 'テキストを既存の') )...これは、既存のテキストが消えるまで待つべきです。ドロップダウンはspan、ulおよびliの組み合わせで作成されます。手動でクリックしてオプションを選択する必要があります – Grasshopper

答えて

0

あなたの問題は、あなたがtxtCardAmtが空でない名前を持つ要素のテキストまで待つことです。問題は、これが常に正しいことです。

あなたが興味を持ってHTMLに見てみる場合:

<input type="text" name="txtCardAmt" ng-model="mcz.txtCardAmt" 
class="mczreadonly ng-pristine ng-valid mczblue" placeholder="0" 
readonly="readonly" disabled=""> 

テキストがないことがわかります。

enter image description here

私の例では7.38です:

あなたは(HTMLでは見えない)を探している情報は、属性値です。

ので:

elem = driver1.find_element_by_name('txtCardAmt') 
value = elem.get_attribute("value") 
print(value) 

日付と通貨の選択に関するあなたのコードは動作しません。私の例では、そのためにxpathを使いました。私はこの作業を行うより良い方法があると確信しています。ブラウザのインス​​ペクタのツールから返されたxpathを使用しました。

全体の例:あなたはtext_to_be_present_in_elementのwait.until_notのための 'wait.until_not' EC(ExpectedConditions.text_to_be_present_in_element((By.Nameを使用する必要が

import time 
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 

link1 = 'https://www.mastercard.us/en-us/consumers/get-support/convert-currency.html' 
driver1 = webdriver.PhantomJS(executable_path=r'/pathTo/phantomjs') 
driver1.get(link1) 

driver1.find_element_by_id('getDate').click() 
wait = WebDriverWait(driver1, 20) 
wait.until(EC.presence_of_element_located((By.XPATH,"/html/body/div[1]/div/div/div/div[2]/div[3]/div/div/div[2]/div/div/div/a[1]/span"))) 
driver1.find_element_by_xpath("/html/body/div[1]/div/div/div/div[2]/div[3]/div/div/div[2]/div/div/div/a[1]/span").click() 
driver1.find_element_by_xpath("//*[@id='transactiondatepicker']/div/table/tbody/tr[2]/td[3]/a").click() 


#select = driver1.find_element_by_id('firstID') 
#driver1.execute_script(script, select, 'USD'); 
driver1.find_element_by_xpath("//*[@id='mczRowC']/div[2]/button").click() 

wait.until(EC.presence_of_element_located((By.XPATH,"//*[@id='mczRowC']/div[2]/div/ul/li[146]/a"))) 
driver1.find_element_by_xpath("//*[@id='mczRowC']/div[2]/div/ul/li[146]/a").click() 


driver1.find_element_by_name('txtTAmt').send_keys('1.00') 
driver1.find_element_by_name('txtBankFee').send_keys('2.00') 

#select = driver1.find_element_by_id('newID') 
#driver1.execute_script(script, select, 'EUR'); 
driver1.find_element_by_xpath("//*[@id='mczRowD']/div[2]/button").click() 
wait.until(EC.presence_of_element_located((By.XPATH,"//*[@id='mczRowD']/div[2]/div/ul/li[49]/a"))) 
driver1.find_element_by_xpath("//*[@id='mczRowD']/div[2]/div/ul/li[49]/a").click() 


driver1.find_element_by_id('btnSubmit').click() 

time.sleep(3) 
elem = driver1.find_element_by_name('txtCardAmt') 
value = elem.get_attribute("value") 
print(value) 
関連する問題