2016-07-09 12 views
0

セレンで外貨USD/CADの価格履歴データをダウンロードする自動スクリプトを作成しようとしていました。 :これらのデータは、このようになります、セレンの要素が期待どおりに動作しない

https://www.dukascopy.com/swiss/english/marketwatch/historical/

で、私は手動で「ティック」ボタンを選択した後、1時間燭台オプションを選択しダウンロードすると「時間」を選択したいデータをご利用いただけます

enter image description here

そして提供側面積がクリック可能になります。私はセレンと、このプロセスを自動化した場合、コードは次のようになります。

driver = webdriver.Firefox() 
driver.get("https://www.dukascopy.com/swiss/english/marketwatch/historical/") 

# wait for the frame to load and switch 
wait = WebDriverWait(driver, 20) 
iframe = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".mainContentBody iframe"))) 
driver.switch_to.frame(iframe) 

for pair in ["USDCAD"]: 
    css_selector = "ul > li[data-group][data-instrument='{}/{}']".format(pair[:3], pair[3:]) 
    li_item = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, css_selector))) 
    li_item.click() 

    # Set the two options about candlestick 
    candle_unit_menu_ele = driver.find_element_by_id(":i") 
    candle_unit_menu_ele.click() 

    candle_unit_ele = wait.until(EC.visibility_of_element_located((By.ID, ":3")) 
    candle_unit_ele.click() 

ただし、このスクリプトを実行した後、あなたはUSD/CADのボタンがありますキャンドルユニットが時間に設定されていない一方で、選択、またしていますオファー側セクションが利用可能になります。画像:

enter image description here

これが起こって、どのように期待される成果を持っている理由私は疑問に思って。

ありがとうございます!

+0

ユニットはに何を設定しない:

candle_unit_ele = wait.until(EC.visibility_of_element_located((By.ID, ":3")) candle_unit_ele.click() 

をして上にあなたのコードを置き換えますか? –

+0

時間に設定する必要があります@YuZhang –

+0

あなたはどのバージョンのSeleniumとFirefoxを使用していますか?私はFirefox 45.2とSelenium 2.52です。私はあなたのコードを実行したときに動作します。 – aneroid

答えて

0

編集:

それが正しい要素をクリックすると、問題があるかもしれません。だから、行の後:

candle_unit_ele = wait.until(EC.visibility_of_element_located((By.ID, ":3"))) 

追加:

candle_unit_ele = driver.find_element_by_xpath("//*[@id=':3']/div") 

を... ID :3でのdivの子div要素をクリックします。

ので、これら2つのステップが今することができ:

# Set the two options about candlestick 
candle_unit_menu_ele = driver.find_element_by_id(":i") 
candle_unit_menu_ele.click() 

candle_unit_ele_parent = wait.until(EC.visibility_of_element_located((By.ID, ":3"))) 
candle_unit_ele = candle_unit_ele_parent.find_element_by_xpath("//*[@id=':3']/div") 
candle_unit_ele.click() 

または:

candle_unit_ele = wait.until(EC.visibility_of_element_located((By.ID, ":3")) 
:ところで、あなたがライン上の構文エラーを持っている

candle_unit_ele = wait.until(EC.visibility_of_element_located((By.XPATH, "//*[@id=':3']/div"))) 
candle_unit_ele.click() 

閉じ括弧が必要:

candle_unit_ele = wait.until(EC.visibility_of_element_located((By.ID, ":3"))) 

また、実際にはループしていないので、エラーではありませんが、for pair in ["USDCAD"]:という行は不要です。他の通貨オプションをループオーバーする予定がない限り、ただpair = "USDCAD"で十分です。しかし、それらはラジオボタンなので、最後にループを実行するだけになります。

+0

私はFirefoxの下位バージョンに切り替えようとしましたが、機能しませんでした。それから私はそれが働いたクロムに切り替えることを試みた –

+0

別の要素をクリックするために私の答えを変更しました。編集を参照してください。 – aneroid

0

は、私はこれを試してみましたが、それは私のために働いていた:

candle_unit_ele = driver.find_element_by_id(":3") 
    candle_unit_ele.click() 
関連する問題