我想等待一个页面完成转换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
文件。
答案 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()