2017-11-02 8 views
1

jsonファイルの変換が完了するのを待ってから、自動的にダウンロードします。以下のPythonコードが動作します。Selenium - Webページでファイル変換を完了した後、ボタンをクリック

import time 
from selenium import webdriver 

chrome = webdriver.Chrome() 
chrome.get('https://json-csv.com/')  
load_data = chrome.find_element_by_id('fileupload') 
load_data.send_keys('C:\\path_to_file') 
load_data.submit() 

# Wait arbitrary duration before downloading result 
time.sleep(10) 
get_results = chrome.find_element_by_id('download-link') 
get_results.click() 
chrome.quit() 

しかし、私はスクリプトを実行するたびに、私は、ページがファイルを変換を完了するのは十分以上である10秒、待つ必要があります。これは時間効率的ではありません。ページが5秒で新しいファイルの読み込みを終了することがあります。

ファイルの変換が完了したら、ダウンロードボタンをクリックする方法を教えてください。 ElementNotVisibleException:メッセージ:表示されていない要素を私は同様の問題にsolutionを読んだが、それはエラーを投げた

を試してみた何

the documentation example次試してみました:

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 

... 

wait = WebDriverWait(chrome, 10) 
get_result = wait.until(EC.element_to_be_clickable((By.ID, 'download-link'))) 
get_result.click() 

これは代わりに、いくつかのナンセンス.tmpファイルをダウンロードします。

答えて

1

この行を削除しますWebElementをという文節でBy.ID, 'convert-another'とし、DOWNLOADリンクを次のようにクリックします。

wait = WebDriverWait(chrome, 10) 
wait.until(EC.element_to_be_clickable((By.ID, 'convert-another'))) 
chrome.find_element_by_css_selector("a#download-link.btn-lg.btn-success").click() 
chrome.quit() 
0

コードは問題ありません。例外は、load_data.send_keys('C:\\path_to_file')の後にload_data.submit()と呼び出したためです。私はあなたがしようとすることをお勧め、

むしろ句element_to_be_clickableBy.ID, 'download-link'としてWebElementを待っている:あなたは、次のようなアプローチに小さな変更を加える必要があり

chrome.get('https://json-csv.com/') 
load_data = chrome.find_element_by_id('fileupload') 
load_data.send_keys('C:\\path_to_file') 


wait = WebDriverWait(chrome, 10) 
get_result = wait.until(EC.element_to_be_clickable((By.ID, 'download-link'))) 
get_result.click() 
+0

編集して再試行しましたが、残念ながら.tmpファイルが返されます。さらに、私は、スクリプトが "待っている"ようには見えないことにも気付きました。すぐにtmpファイルをダウンロードして終了します。 –

関連する問題