2010-11-03 113 views
3

首先下載的,我很抱歉,我的英語是否有可能知道哪些文件是由火狐硒

我做的使用Selenium RC在Python一些腳本。 目的是訪問某些網站,並下載一些文件 我想知道,在腳本,什麼文件到底有沒有被下載

在那一刻結束,我做得有點幼稚,這是檢查出現在Firefox的下載目錄中的新文件,它運行良好,但如果我在同一時間啓動幾個客戶端,他們無法檢測到他們擁有哪些文件等等......

所以我是試圖找到解決方案,如果可以處理從Firefox的下載,以確切地知道下載何時發生,以及下載什麼,那麼我會超級好,但到目前爲止,我還沒有找到任何有關

感謝您的幫助

回答

0

如果您正在使用Python - >硒RC爲什麼你不只是 創建lastdownload.txt類型的文件,並放在日期,文件名的文件 你下載。

因此,每次腳本運行時,它都會檢查文件服務器和日誌文件 ,以查看哪些文件是新的,哪些文件已存在。 (如果使用相同的文件名 ,你可以檢查最後更新時間的標題,或甚至文件大小作爲比較的方式)

然後,你只需下載新文件...這樣你就可以複製一個簡單的增量機制與查找在一個txt文件...

+0

該解決方案的問題是,如果有多個客戶端連接到相同的服務器並下載相同使用Selenium RC來處理一些文件,無法知道哪個客戶端下載了哪個文件。 例如,如果client1同時下載file1和client2同時下載file2,那麼該解決方案將暗示client1和client2同時下載了這兩個文件 – Dlieu 2010-11-08 14:19:54

0

嗯,我找到的東西來回答我的問題(僅限Firefox瀏覽器),代碼足夠清晰瞭解(你應該是指國家和目標從moz_downloads Firefox的API中)

def check_download(self): 
    isDownloading = False 
    t = 0 
    while t != 60 or isDownloading: 
     shutil.copy(os.path.join(self.finalFolder, "downloads.sqlite"), os.path.join(self.log_dir, self.sessionId+"downloads.sqlite")) 
     conn = sqlite3.connect(os.path.join(self.log_dir, self.sessionId+"downloads.sqlite")) 
     c = conn.cursor() 
     c.execute("select state, target from moz_downloads") 
     print '<waiting for download>' 
     for row in c: 
      dlState = row[0] 
      dlTarget = row[1] 
      if dlState == 0 or dlState == 7 or dlState == -1: 
       isDownloading = True 
      if self.verbose: 
       print "status: {0} | target: {1}".format(dlState, dlTarget) 
      if dlState == 1: 
       filenameExpected = os.path.join(self.download_dir, os.path.split(dlTarget)[1]) 
       self.writeline_log("FILE;" + filenameExpected + ';') 
       return 
     c.close() 
     conn.close() 
     time.sleep(1) 
     t = t + 1 
0

我還沒有嘗試過,但我會考慮設置多個Firefox配置文件然後告訴我的實例使用這些配置文件(或者如果您使用Selenium2,可能是編程設置配置文件值 - 我不確定下載目錄是否可以更改)。然後,您可以繼續監視每個目錄並查看每個會話的下載內容。

0

在這種情況下,每次只需創建一個新文件夾並在那裏下載文件。 確保文件夾名已增加(如:文件夾1,文件夾2,文件夾3 .....)