首页 > 解决方案 > 控制文件名下载硒

问题描述

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
path_to_download = '/home/dev/'
options = Options()
options.add_experimental_option("prefs", {
  "download.default_directory": path_to_download,
  "download.prompt_for_download": False,
  "download.directory_upgrade": True,
  "safebrowsing.enabled": True
})

options.add_argument('start-maximized')
driver = webdriver.Chrome(executable_path='/home/dev/Downloads/chromedriver_linux64/chromedriver',
    options=options)
#long logic
elem2 = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//*[contains(text(), 'Excel')]")))
elem2.click() #downloads the file (export to excel)

现在我坚持把一个time.sleep(5)thenos.rename(f'{path_to_download}/exported.xlsx',f'{path_to_download}/{my_id}.xlsx')

有没有办法在下载文件时或之前控制文件名?

标签: selenium

解决方案


您可以通过检查下载目录中的文件是否存在并一遍又一遍地循环直到文件出现来实现这一点。

你可以这样做:

    # check the size of the file and return 0 if doesn't exist
    def getSize(filename):
        if os.path.isfile(filename):
            st = os.stat(filename)
            return st.st_size
        else:
            return 0

    def wait_download(file_path):
        current_size = getSize(file_path)
        printed = False
        start_time = time.time()

        # loop over and over until the current_size change
        while current_size !=getSize(file_path) or getSize(file_path)==0:
            current_size = getSize(file_path)

            # print something to the string to know that we are waiting for the file
            while printed == False:
                print("Downloading file...")
                print("Waiting for download to complete...")
                printed = True



            # Here we add an exit to not loop forever
            if (time.time() - start_time) > 15:
                return -1

       return 0

# In your code you can call the function like that
files = wait_download(f'{path_to_download}/exported.xlsx')

if files == 0:
    #do something
else:
    # the file didn't download

推荐阅读