2016-07-13 24 views
3

PythonでSeleniumを使用するのが初めてで、Barclays LiveのWebサイトでインデックスデータにアクセスしようとしています。ログインしてページが読み込まれると、ページのドロップダウンから「Custom1」を選択しようとしています。リストに関連付けられたHTMLコードで選択したオブジェクトは、次のようになります。PythonでSeleniumを使用してドロップダウンセレクトにアクセスできない

<select name="customViewId" class="formtext" onchange="submitFromSelect('username');return false;"> 
    <option value="">&nbsp;</option> 
    <option value="Favorite Indices">Favorite Indices</option> 
    <option value="Custom1">Custom1</option> 
    <option value="CB group">CB group</option> 
    <option value="Kevin Favorites">Kevin Favorites</option> 
    <option value="LB Gov/Cdt intermediate">LB Gov/Cdt intermediate</option> 
</select> 

を、私は、このオブジェクトにアクセスしようとするまで、これが私のコードのアップです:

from selenium import webdriver 
from selenium.webdriver.support.select import Select 

#Get chrome driver and connect to Barclays live site 
browser = webdriver.Chrome("C:\Program Files (x86)\Google\Chrome\chromedriver.exe") 
browser.get('https://live.barcap.com/') 

#Locate username box and enter username 
username = browser.find_element_by_name("user") 
username.send_keys("username") 

#Locate password box and send password 
password = browser.find_element_by_name("password") 
password.send_keys("password") 

#Click login button 
login = browser.find_element_by_id("submit") 
login.click() 

#Open page where you can select indices 
browser.get("https://live.barcap.com/BC/barcaplive?menuCode=MENU_IDX_1061") 

私は提案の数を試してみました私が見つけた解決策は、通常、 "要素を見つけることができませんでした"というエラーがあります。続いて、どのような方法でも、選択オブジェクトにアクセスしようとしました。名前、xpath、またはSelect()関数を使ってアクセスすることはできないようです。私は、要素がまだロードされていない場合、および運がない場合には、コードに待機時間を置こうとしました。物事のいくつかの例は、私が動作することを期待しますが、ありません。

select_box = browser.find_element_by_name("customViewId") 
select_box = browser.find_element_by_xpath("//select[option[@value='Custom1']]" 

私のバックグラウンドは、プログラミングではありませんが、これは愚かな質問がある場合は私に簡単に行きます。助けを前にありがとう。

+0

この 'select'要素が' iframe'の中にあるかどうか確認できますか? – alecxe

+0

select要素は実際にiframe内にあります。 – kforce

答えて

1

実際に選択要素はiframe内にあります。

これは、フレームのコンテキストにswitchあなたがすべきことを意味し、だけにして要素を見つける:

browser.switch_to.frame("frame_name_or_id") 
select_box = browser.find_element_by_name("customViewId") 

あなたは、フレームのコンテキストから背中使用を取得する必要がある場合:

選択ボックスの一部を操作するよう
browser.switch_to.default_content() 

、より良い方法があります - Select classを使用します。

from selenium.webdriver.support.select import Select 

select_box = Select(browser.find_element_by_name("customViewId")) 
select_box.select_by_visible_text("CB group") 
+0

これは完全に働いた。本当にありがとう! – kforce

0

選択した要素をキーを送信して変更する1つの方法。

最初にselect要素を見つけて、それにキーを送ります。あなたは通常、最初の1〜3文字しか必要とせず、要素から適切な(一意の)結果を得る必要があります。

select_elem = browser.find_element_by_name("customViewId") 
select_elem.send_keys("cu") 

別のオプションは、ドロップダウンから選択するか、最初のクリックせずにキーを送信すると、動作しない場合は、キーを送った後、arrowkey脳卒中またはそのような何かを送信するために、または選択に.click()を行うことであろう。 - これにJSコードを書く

select_box = browser.find_element_by_name("customViewId") 
option = select_box.find_element_by_xpath("/[option[@value='Custom1']]") #example only - untested for this case 

最後に、別のオプションはbrowser.execute_scriptを使用して要素を変更するために任意にいくつかのJavaScriptを実行するために、次のようになります。また

、あなたはまたのような他の要素に対する要素を、見つけることができますそれはおそらくここの範囲を超えていますか?

YMMV特定のページ/方法によって異なります。

+0

残念ながら、これは私のためには機能しません。エラーは、最初にselect要素を検索しようとする際に発生します。browser.find_element_by_nameはエラーになります。 – kforce

+0

さて、わかりました。あなたの問題はオプションを選択していませんでしたが、むしろ...まずはselect要素を選択していました。私は誤解して、それがiFrameにあったことを知らなかった – sytech

関連する問題