Webdriver在下载完成后立即打开文件

时间:2013-01-07 16:51:29

标签: python selenium automated-tests selenium-webdriver

我正在编写一些测试,我正在使用带有Firefox webdriver的{​​{1}}从外部网址下载文件,但我需要尽快阅读此类文件完成下载以检索一些特定数据。

我设置了我的个人资料和驱动程序:

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) 或使用任何Firefox附加组件?

感谢您的帮助:)

2 个答案:

答案 0 :(得分:1)

您可以尝试将文件挂接到文件对象,因为它下载时将其用作流缓冲区,在下载时轮询它以获取所需数据,直接监视下载完成(通过等待文件是预期的大小,或假设如果在一定时间内没有添加新数据则完整。

编辑:

您可以尝试查看配置文件文件夹中的下载跟踪数据库,如引用的here。看起来您可以等待文件的状态为1。

答案 1 :(得分: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个事件