2015-05-25 3 views
0

Вот что я хочу сделать:Загрузка файла с использованием Selenium, с до 3 попыток

  1. Использование Python 3 и Селен, нажмите на ссылку, чтобы загрузить файл.
  2. Проверяйте каждые 50 миллисекунд, чтобы убедиться, что файл существует. Загрузите файл еще раз, если он не существует через 5 секунд.
  3. После того, как файл существует, проверьте каждые 50 миллисекунд, чтобы получить размер файла и убедитесь, что он имеет более 0 байт. Загрузите файл еще раз, если это пустой файл.
  4. После того, как файл существует и имеет более 0 байт, проверьте файл на nul байты. Если он имеет nul байты, загрузите файл еще раз.

Я хочу попытаться скачать файл до 3 раз. После 3 попыток я хочу выйти из сценария.

Вот в основном то, что я до сих пор:

##### attempt to download a good file up to 3 times 

loop_1 = 0 
while loop_1 < 3: 
    driver.find_element_by_link_text('Download Results').click() ##### download the file 

##### check the existence of the downloaded file; if not there within 5 seconds, download the file again 

    loop_2 = 0 
    while loop_2 < 100: 
     f_exists = os.path.isfile('/Users/jeff/download.csv') 
     if f_exists == True: 


##### check file byte size is greater than 0; if not greater than 0 within 5 seconds, download the file again 

      loop_3 = 0 
      while loop_3 < 100:  
       f_size = os.path.getsize('/Users/jeff/download.csv') 
       if f_size > 0: 
        break 
       else: 
        loop_3 = loop_3 + 1 

##### check if nul bytes are in the file; if yes, download the file again 

       if '\0' in open('/Users/jeff/download.csv').read(): 
        print("WARNING: THERE ARE NUL BYTES IN THE downloaded_file.csv FILE.") 
       else: 
        print("there are no nul bytes in the downloaded_file.csv file") 
        break 
      else: 
       loop_3 = loop_3 + 1 
       time.sleep(.05) 
     else: 
      loop_2 = loop_2 + 1 
      time.sleep(.05) 
    else: 
     loop_1 = loop_1 + 1 
     time.sleep(.05) 
+0

'в то время как loop_3 <100:' блок включает в себя этот код, имеет ли файл любой длины или нет 'если '\ 0' в открытых ('/ Users/Джеф/download.csv') следующим образом():.' , я бы предложил поместить еще один 'time.sleep (.05)' after' loop_3 = loop_3 + 1' –

+0

добавил time.sleep (.05) и обновил выше, как было предложено; все еще ищут ответ –

+0

Как это происходит? На какой стадии это происходит? Что должно было произойти на этом этапе? – knitti

ответ

0

После 2 дней большого разочарования, и некоторая помощь от другого вопроса, я спросил, блестяще ответило, вот что я придумал, что работает (по крайней мере, у меня не было никаких тестов, которые я додумал до сих пор).

##### create functions 

def file_exists(): 
    for j in range(0,101): 
     f_exists = os.path.isfile('/Users/jeff/download_file.csv') 
     if not f_exists: 
      time.sleep(.05) 
     elif f_exists: 
      return(True) 
    return(False) 

def file_size(): 
    for j in range(0,101): 
     f_size = os.path.getsize('/Users/jeff/download_file.csv') 
     if not f_size > 0: 
      time.sleep(.05) 
     elif f_size: 
      return(True) 
    return(False) 

##### attempt to download a good notes data file up to 3 times 

loop_1 = 0 
while loop_1 < 3: 

    driver.find_element_by_link_text('Download Search Results').click() ##### download file 

    ##### check to make sure the file exists before further processing; 
    ##### if not there within a short time, try to download the file again 

    file_down = file_exists() 
    if file_down != True: 
     loop_1 = loop_1 + 1 
     print("WARNING: THE download_file.csv FILE FAILED TO DOWNLOAD.") 
     continue 

    ##### check to make sure the file contains data (more than 0 bytes) before 
    ##### further processing; if 0 bytes, try to download the file again 

    file_down = file_size() 
    if file_down != True: 
     os.remove('/Users/jeff/download_file.csv') 
     loop_1 = loop_1 + 1 
     print("WARNING: THE DOWNLOADED download_file.csv FILE IS AN EMPTY FILE; 0 BYTES.") 
     continue 

    ##### check to make sure there are no NUL bytes in the file; 
    ##### if there are Nul bytes, try to download the file again 

    elif '\0' in open('/Users/jeff/download_file.csv').read(): 
     os.remove('/Users/jeff/download_file.csv') 
     print("WARNING: THERE ARE NUL BYTES IN THE DOWNLOADED download_file.csv FILE.") 
     loop_1 = loop_1 + 1 
     continue 
    else: 
     break