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

xyhw6mcr  于 2023-01-09  发布在  Python
关注(0)|答案(2)|浏览(149)

我尝试使用Selenium python从网站下载csv文件,但在实际下载时遇到问题。虽然文件确实下载,但它应该是csv文件,但却显示为不完整的.tmp文件(真实的的csv应该有50,000+行,而.tmp文件只有〈100行)当我从网站手动下载文件时,下载正确完整的csv文件。2代码如下:

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

任何帮助和/或想法将不胜感激!谢谢!

iyfjxgzm

iyfjxgzm1#

在代码末尾添加一个等待,这样Selenium浏览器不会立即关闭,
司机,等3万
或者
将chromedriver的变量视为作用域之外,这将使其保持打开状态,直到您关闭它。

qvk1mo1f

qvk1mo1f2#

您可以定义一个等待下载的函数,如本主题所示:python selenium, find out when a download has completed?

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必须足够长,以避免浪费时间睡觉和足够短,以尽可能接近下载结束,无论哪种方式都不应该太短,以避免运行多次。

相关问题