Selenium (Python) - waiting for a download process to complete using Chrome web driver

后端 未结 9 1166

I\'m using selenium and python via chromewebdriver (windows) in order to automate a task of downloading large amount of files from different pages. My code works, but the so

相关标签:
9条回答
  • 2020-12-04 19:11

    When using test automation, its crucial that developers make the software testable. It is your job to check the software combined with the testability, meaning that you need to request a spinner or a simple HTML tag which indicates when the download is done successfully.

    In a case as yours, where you cannot check it in the UI and you cannot check in system, this is the best way to solve it.

    0 讨论(0)
  • 2020-12-04 19:14

    I had the same problem and this method worked for me.

    import time
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from selenium.common.exceptions import ElementClickInterceptedException
    from threading import Thread
    import os
    import datetime
    def checkFilePresence(downloadPath, numberOfFilesInitially, artistName, 
        songTitle):
        timeNow = datetime.datetime.now()
        found = False
        while not found:
            numberOfFilesNow = len(os.listdir(downloadPath))
            if numberOfFilesNow > numberOfFilesInitially:
                for folders, subfolders, files in os.walk(downloadPath):
                    for file in files:
                        modificationTime = datetime.datetime.fromtimestamp\
                        (os.path.getctime(os.path.join(folders, file)))
                        if modificationTime > timeNow:
                            if file.endswith('.mp3'):
                                return
    
    0 讨论(0)
  • 2020-12-04 19:17

    This may not work for all usecases but for my simple need to wait for one pdf to download it works great. Based off of Walter's comment above.

    def get_non_temp_len(download_dir):
        non_temp_files = [i for i in os.listdir(download_dir) if not (i.endswith('.tmp') or i.endswith('.crdownload'))]
        return len(non_temp_files)
    
    download_dir = 'your/download/dir'
    original_count = get_non_temp_len(download_dir) # get the file count at the start
    
    # do your selenium stuff 
    
    while original_count == get_non_temp_len(download_dir):
        time.sleep(.5) # wait for file count to change
        
    driver.quit()
    
    0 讨论(0)
提交回复
热议问题