2013-01-07 63 views
2

我正在編寫一些測試,我正在使用Firefox webdriverFirefoxProfile從外部網址下載文件,但我需要儘快閱讀此文件因爲它完成下載以檢索某些特定數據。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", '/some/path/') 
fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "text/plain, application/vnd.ms-excel, text/csv, text/comma-separated-values, application/octet-stream") 

ff = webdriver.Firefox(firefox_profile=fp) 

有一些方法來知道什麼時候該文件完成下載,讓我知道什麼時候打電話給閱讀器功能,而無需查詢下載目錄,等着time.sleep還是使用任何Firefox插件?

感謝所有幫助:)

+0

我認爲這是Linux嗎?您可以使用inotify觀看目錄並處理事件。但那麼它將處於不同的線程或過程中。如果你想讓我發佈它,我有示例代碼。 – aychedee

+0

是的,它是Linux。您能否發佈它或留下一個鏈接到要點?任何你想要的。也許我可以找出它的東西:)謝謝 – Gerard

回答

1

你可以嘗試掛鉤文件到一個文件對象,因爲它下載到使用它像一個流緩衝區,輪詢,因爲它下載到得到你需要的數據,監控直接下載完成(或者通過等待文件達到預期的大小,或者如果在一定時間內沒有添加新數據,則假定文件已完成)。

編輯:

你可以嘗試一下下載跟蹤數據庫配置文件中的文件夾中引用here。看起來你可以等待你的文件具有狀態1.

+0

對不起,但我不能承擔的事情,我需要確保該文件是完全正確的。無論如何,感謝您的幫助:) – Gerard

0

我喜歡使用inotify來觀察這類事件。一些示例代碼,

from pyinotify import (
    EventsCodes, 
    ProcessEvent, 
    Notifier, 
    WatchManager, 
) 

class EventManager(ProcessEvent): 

    def process_IN_CLOSE_WRITE(self, event): 
     file_path = os.path.join(event.path, event.name) 
     # do something to file, you might want to wait a second here and 
     # also test for existence because ff might be making temp files 

wm = WatchManager() 
notifier = Notifier(wm, EventManager()) 
wdd = wm.add_watch('/some/path', EventsCodes.ALL_FLAGS['IN_CLOSE_WRITE'], rec=True) 

While True: 
    try: 
     notifier.process_events() 
     if notifier.check_events(): 
      notifier.read_events() 
    except: 
     notifier.stop() 
     raise 

通知程序根據事件的名稱決定在事件管理器上調用哪個方法。所以在這種情況下,我們只關注IN_CLOSE_WRITE事件

+0

is'pyinotify'一個標準的軟件包? –

+0

不需要,你需要'pip安裝pyinotify',它是一個僅在Linux中可用的inotify系統調用的包裝。 – aychedee

+0

那我現在用的是windows 7,對mw怎麼樣? –

相關問題