Именование файла при загрузке с помощью Selenium Webdriver

Я вижу, что вы можете установить, где скачать файл через Webdriver, следующим образом:

fp = webdriver.FirefoxProfile()

fp.set_preference("browser.download.folderList",2)
fp.set_preference("browser.download.manager.showWhenStarting",False)
fp.set_preference("browser.download.dir",getcwd())
fp.set_preference("browser.helperApps.neverAsk.saveToDisk","text/csv")

browser = webdriver.Firefox(firefox_profile=fp)

Но мне было интересно, есть ли способ указать имя файла при его загрузке? Предпочтительно, вероятно, не что-то, что связано с профилем, так как я буду загружать ~ 6000 файлов через один экземпляр браузера и не хочу повторно запускать драйвер для каждой загрузки.


Изменить: решение с кодом, предложенным выбранным ответом. Переименуйте файл после загрузки каждого из них.

import os
os.chdir(SAVE_TO_DIRECTORY)
files = filter(os.path.isfile, os.listdir(SAVE_TO_DIRECTORY))
files = [os.path.join(SAVE_TO_DIRECTORY, f) for f in files] # add path to each file
files.sort(key=lambda x: os.path.getmtime(x))
newest_file = files[-1]
os.rename(newest_file, docName+".pdf")

Ответ 1

Я не знаю, есть ли для этого чистый обработчик Selenium, но вот что я сделал, когда мне нужно было что-то сделать с загруженным файлом.

  • Установите цикл, который опросит ваш каталог загрузки для последнего файла, который имеет не, расширение .part (это указывает на частичную загрузку и время от времени останавливает работу, если не учитывается Поставьте таймер на это, чтобы убедиться, что вы не переходите в бесконечный цикл в случае таймаута/другой ошибки, из-за которой загрузка не завершится. Я использовал вывод команды ls -t <dirname> в Linux (мой старый код использует commands, который устарел, поэтому я не буду показывать его здесь:)) и получил первый файл с помощью

    # result = output of ls -t
    result = result.split('\n')[1].split(' ')[-1]
    
  • Если цикл while завершается успешно, самым верхним файлом в каталоге будет ваш файл, который затем можно изменить с помощью os.rename (или что-нибудь еще, что вам нравится).

Вероятно, это не тот ответ, который вы искали, но, надеюсь, он указывает вам в правильном направлении.

Ответ 2

Я бы предложил немного странно: не скачивайте файлы с использованием Selenium, если это возможно.

Я имею в виду получить URL-адрес файла и использовать библиотеку urllib, чтобы загрузить файл и сохранить его на диск "вручную". Проблема в том, что у селена нет инструмента для обработки диалоговых окон Windows, таких как диалог "сохранить как". Я не уверен, но я сомневаюсь, что он может обрабатывать любые диалоги ОС, пожалуйста, исправьте меня, я ошибаюсь.:)

Вот крошечный пример:

import urllib
urllib.urlretrieve( "http://www.yourhost.com/yourfile.ext", "your-file-name.ext")

Единственная работа для нас здесь - убедиться, что мы обрабатываем все исключения urllib. Для получения дополнительной информации см. http://docs.python.org/2/library/urllib.html#urllib.urlretrieve.