2015-01-16 2 views
3

Мне удалось скачать файл с помощью Selenium. Но Firefox автоматически переименовывает файл, добавляя 1,2,3 .. к именам файлов, поскольку каждый файл, отправленный сервером, имеет то же имя. Но я хочу переименовать файлы на основе текущей даты & времени. Итак, попробовал:Сделать Selenium ждать завершения загрузки файла

  1. Начать загрузку файла-> скачатьLink.click();

  2. While (НЕ файл-С-оригинальное имя существует или < имя файла > .part существует)       {} Thread.sleep(2000);

  3. Переименуйте загруженный файл в нужное имя.

Но он переименовывает некоторые файлы. И некоторые из них имеют длину 0, а последний файл даже не переименован. Я думаю, это связано с тем, что мой код продолжается после загрузки и не проводит опрос в цикле while. Что мне делать ? Заранее спасибо.

+1

Сначала вы можете удалить с вашего диска файл, чтобы избежать автоматического переименования firefox, а затем, если вы знаете размер файла, вы можете проверить его на своем цикле. – Morvader

+0

Я могу «переместить» (не удалять) файл только после завершения загрузки, и мой вопрос в том, как я узнаю, что он завершен? –

+0

Знаете ли вы Размер файла ?. Если вы это знаете, вы можете добавить это условие к циклу while. Подождите, пока файл не появится и достигнет этого размера – Morvader

ответ

0

Я бы получил автоматизацию, чтобы переместить файл в другое место и переименовать его. System.IO.File.Move("oldfilename", "newfilename"); (C#)

Возможно, добавьте дату и время в конец имени файла.

Таким образом, у вас никогда не будет проблемы с дублирующимися именами файлов и невозможностью найти правильный файл.

+1

Не могу, Пожалуйста, обратитесь к моему комментарию выше. Моя проблема не переименование, а поиск, когда Firefox завершает загрузку. –

0

double fileSize = file.length(); while (! File.exists() || fileSize == 0) {Thread.sleep (2000); }

0

Лучшим решением является переименование файла после его загрузки.

Также я предлагаю вам очистить любой файл .part как предварительное условие запуска. Затем, прежде чем вы войдете в цикл while, в зависимости от скорости вашего компьютера и скорости интернета, сделайте Thread.sleep(); скажем, thread.sleep для 5k miliseconds.

Затем введите цикл while и найдите файл .part. Найдите файл, заканчивающийся на .part. Если он существует, подождите еще 5 тысяч милисекунд.

Это решение сработало для меня до сих пор.

Смежные вопросы