【问题标题】:Incomplete .tmp file is downloaded instead of .csv when using Selenium Python使用 Selenium Python 时下载不完整的 .tmp 文件而不是 .csv
【发布时间】:2021-06-24 21:58:41
【问题描述】:

我正在尝试使用 selenium python 从网站下载 csv 文件,但在进行实际下载时遇到问题。虽然文件确实下载,但它应该是一个 csv 文件,但却显示为一个不完整的 .tmp 文件(真正的 csv 应该有 50,000+ 行,而 .tmp 文件只有

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

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

【问题讨论】:

    标签: python selenium selenium-webdriver webdriver selenium-chromedriver


    【解决方案1】:

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

    Driver.wait 30000

    或者

    认为您的 chromedriver 变量超出了范围,这将使其保持打开状态,直到您关闭它。

    【讨论】:

    • 嗨 - 感谢您的意见。它看起来不起作用,因为我认为问题的根源首先与 .tmp 而不是 .csv 的下载有关。关于如何设置 Chrome 首选项以下载 csv 而不是 tmp 的任何想法(我已经看到其他人为 Firefox 这样做的例子)?谢谢!
    • 找到这个 Alex,就是答案。可以帮助stackoverflow.com/questions/46937319/…
    【解决方案2】:

    您可以定义一个等待下载的函数。 就像在这个话题中: 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 必须足够长以避免浪费时间休眠,并且足够短以尽可能接近下载端,无论哪种方式都不应该太短以避免运行多次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-13
      • 1970-01-01
      • 1970-01-01
      • 2018-02-14
      • 2013-12-26
      • 1970-01-01
      • 2016-02-20
      • 1970-01-01
      相关资源
      最近更新 更多