我正在编写一些测试,我正在使用带有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附加组件?
感谢您的帮助:)
答案 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
个事件