2016-03-10 1 views
1

Je dois m'assurer qu'un fichier a été téléchargé avant que mon script puisse continuer. J'ai fait quelques recherches sur la fonction exists() mais je ne trouve pas d'exemple de ce que j'essaie réellement de faire.Vérifiez que le fichier a été téléchargé avant de continuer avec le script

Je tente de télécharger plusieurs fichiers. J'ai une destination statique pour tous les fichiers en cours de téléchargement. Je dois m'assurer que les fichiers ont été téléchargés avec succès dans le fichier avant que le script puisse continuer. Quelqu'un peut-il m'aider avec un exemple de ce que ce script aurait l'air?

Voici ce que je travaille avec:

import time 
import os 
import glob 
import os.path 
from selenium.webdriver.common.action_chains import ActionChains 
from selenium.common.exceptions import MoveTargetOutOfBoundsException 
from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
from selenium.common.exceptions import NoSuchElementException 
from selenium.common.exceptions import NoAlertPresentException 

for x in range(1, 100):  
    while True:  
     try: 
      fp = webdriver.FirefoxProfile('C:/Users/me/Documents/FirefoxProfile') 
      browser = webdriver.Firefox(fp) 
      browser.get('https://reportcenter.com') 

      time.sleep(8) 

      browser.find_element_by_id("ctl00_PlaceHolderMain_login_UserName").clear() 
      browser.find_element_by_id("ctl00_PlaceHolderMain_login_UserName").send_keys("usr") 
      browser.find_element_by_id("ctl00_PlaceHolderMain_login_password").clear() 
      browser.find_element_by_id("ctl00_PlaceHolderMain_login_password").send_keys("pwd") 
      browser.find_element_by_id("ctl00_PlaceHolderMain_login_login").click() 

#gets user to reporting front end 

      ReportMgr= browser.find_element_by_partial_link_text('Report Manager') 
      ReportMgr.click() 

      time.sleep(5) 

      CustomReport= browser.find_element_by_partial_link_text('Custom Report') 
      CustomReport.click() 

      time.sleep(5) 

      ProgramManagement= browser.find_element_by_partial_link_text('Program Management') 
      ProgramManagement.click() 
      ProgramManagement= browser.find_element_by_partial_link_text('Program Management').send_keys(Keys.ARROW_LEFT) 

#pulls reports 

      browser.find_element_by_partial_link_text('Program Management').click() 
      time.sleep(60) 
      browser.find_element_by_partial_link_text('Program Management').send_keys(Keys.ARROW_DOWN * x, Keys.ENTER, Keys.ENTER) 
      time.sleep(180) 
      browser.find_element_by_css_selector("#ctl00_PlaceHolderMain_ReportViewer1_HtmlOutputReportResults2_CSVButton_ImageAnchor > img").click() 
      time.sleep(180) 
      ##THIS IS WHERE I NEED TO VERIFY THAT THE REPORT HAS DOWNLOADED BEFORE I CAN CONTINUE 
      browser.find_element_by_partial_link_text('Program Management').click() 
      time.sleep(60) 
      browser.quit() 

     except: 
       browser.quit()   
       continue 
     else: 
       break 
+0

Il y a plusieurs façons de télécharger des fichiers. Beaucoup d'entre eux ne retournent pas le contrôle au script appelant jusqu'à ce que le téléchargement se termine. Nous devons avoir un exemple de la façon dont vous faites le téléchargement afin que nous puissions voir la technologie que vous utilisez. – tdelaney

+0

Terminé - question mise à jour avec le script :) – Yogwhatup

+0

Avez-vous essayé d'obtenir la chaîne href, puis téléchargez via urllib2? – xvan

Répondre

0

Un moyen serait d'attendre un nouveau fichier apparaisse dans le dossier ciblé.

Exemple d'utilisation:

# take a snapshot of the folder 
waiter = FileWaiter(r"C:\Downloads\*.pdf") 

# trigger the download 
browser.find_element_by_css_selector("...").click()  

# wait for a new file or timeout after 10 seconds 
new_file = waiter.wait_new_file(10) 

# display the new file 
print new_file 

classe d'attente:

import os, time, glob, numbers, exceptions 

class FileWaiter: 

    def __init__(self, path): 
    self.path = path 
    self.files = set(glob.glob(path)) 

    def wait_new_file(self, timeout): 
    """ 
    Waits for a new file to be created and returns the new file path. 
    """ 
    endtime = time.time() + timeout 
    while True: 
     diff_files = set(glob.glob(self.path)) - self.files 
     if diff_files : 
     new_file = diff_files.pop() 
     try: 
      os.rename(new_file, new_file) 
      self.files = set(glob.glob(self.path)) 
      return new_file 
     except : 
      pass 
     if time.time() > endtime: 
      raise Exception("Timeout while waiting for a new file in %s" % self.path) 
     time.sleep(0.1)