2

私はいくつかのテストを書いていて、外部URLからファイルをダウンロードするためにFirefox webdriverwithを使用しFirefoxProfileていますが、特定のデータを取得するには、ダウンロードが完了したらすぐにそのようなファイルを読み取る必要があります。

プロファイルとドライバーを次のように設定します。

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アドオンを使用したりすることなく、リーダー関数を呼び出すタイミングを知ることができますか?

助けてくれてありがとう:)

4

2 に答える 2

1

ダウンロード時にファイルをファイルオブジェクトにフックしてストリームバッファーのように使用し、ダウンロード時にポーリングして必要なデータを取得し、ダウンロードの完了を直接監視することができます(ファイルが予想されるサイズの、または一定期間新しいデータが追加されていない場合は完全であると想定することによって)。

編集:

ここで参照されているように、プロファイルフォルダ内のダウンロード追跡データベースを確認してみてください。ファイルのステータスが1になるのを待つことができるようです。

于 2013-01-07T17:30:43.537 に答える
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したがって、この場合、イベントのみを監視しています

于 2013-01-07T17:41:07.480 に答える