使用Selenium Python时,会下载不完整的.tmp文件而不是.csv



我正试图使用selenium python从网站下载csv文件,但在进行实际下载时遇到问题。当文件下载时,它应该是一个csv文件,但却显示为一个不完整的.tmp文件(真正的csv应该有50000多行,而.tmp文件只有<100行(。当我手动从网站下载文件时,会下载正确完整的csv文件。这是代码:

chromeDriver = config.get_prop('CHROME_DRIVER_PATH')
chromeOpts = Options()
prefs = {"download.default_directory":
"DESTINATION DIRECTORY (THIS WORKS)",
}
chromeOpts.add_experimental_option("prefs", prefs)
driver = webdriver.Chrome(executable_path=chromeDriver, options=chromeOpts)
driver.get("https://oasishub.co/login/?next=/downloads/b2a11100-eac5-4d10-869a-87ba064ede2d")
usernameInput = driver.find_element_by_name("name")
passwordInput = driver.find_element_by_name("password")
usernameInput.send_keys("PROPER USERNAME (LEFT OUT)")
passwordInput.send_keys("PROPER PASSWORD (LEFT OUT)")
driver.find_element_by_xpath('//button[normalize-space()="Login"]').click()
licenseAgreeButton = driver.find_element_by_name("agree")
licenseAgreeButton.click()
driver.find_element_by_xpath("//input[@value='Get the resource']").click()

如有任何帮助和/或想法,我们将不胜感激!谢谢

在代码末尾添加一个等待,这样硒浏览器就不会立即关闭,

驾驶员等待30000

在范围外为chromedriver设置变量,这将使其保持打开状态,直到您关闭它。

您可以定义一个等待下载的函数。如本主题中所述:python selenium,了解下载何时完成?

from pathlib import Path
def is_download_finished(temp_folder):
firefox_temp_file = sorted(Path(temp_folder).glob('*.part'))
chrome_temp_file = sorted(Path(temp_folder).glob('*.crdownload'))
downloaded_files = sorted(Path(temp_folder).glob('*.*'))
if (len(firefox_temp_file) == 0) and 
(len(chrome_temp_file) == 0) and 
(len(downloaded_files) >= 1):
return True
else:
return False 

如果你知道下载后下载文件的名称,你可以使用listdir来确保这个文件在文件夹中:

import os
import time
while file not in os.listdir(download_path):
time.sleep(enough_time)

Ps:enough_time必须足够长以避免浪费睡眠时间,并且必须足够短以尽可能靠近下载端,无论哪种方式,都不应太短以避免多次运行。

最新更新