Selenium - 在网页

时间:2017-11-02 08:31:47

标签: python-2.7 selenium

我想等待一个页面完成转换json文件,然后自动下载它。以下python代码可以正常工作。

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秒内完成加载新文件。

如何在文件转换完成后点击下载按钮?

我尝试了什么

我已经读过类似问题的solution,但它引发了一个错误:ElementNotVisibleException:Message:元素不可见。

还尝试了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文件。

2 个答案:

答案 0 :(得分:1)

您需要对方法进行如下小改动:

相反等待WebElement作为By.ID, 'download-link'条款element_to_be_clickable,我建议您尝试等待WebElement作为By.ID, 'convert-another'条款{{ {1}}然后点击 element_to_be_clickable 链接,如下所示:

DOWNLOAD

答案 1 :(得分:0)

您的代码没问题。例外情况是因为您在load_data.submit()之后致电load_data.send_keys('C:\\path_to_file')

删除此行:

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()