当前位置:  开发笔记 > 编程语言 > 正文

python selenium,找到下载完成后?

如何解决《pythonselenium,找到下载完成后?》经验,为你挑选了2个好方法。

我用selenium开始下载.下载完成后,需要采取某些措施,是否有任何简单的方法可以找出下载完成的时间?(我正在使用FireFox驱动程序)



1> alecxe..:

没有内置的selenium方式等待下载完成.


这里的一般想法是等到文件出现在"下载"目录中.

这可能是通过一遍又一遍地检查文件是否存在来实现的:

检查并等待文件存在以进行读取

或者,通过使用watchdog监视目录之类的东西:

如何查看目录以进行更改?

监控文件/目录的内容?



2> Austin Macki..:

我最近遇到了这个问题。我一次下载了多个文件,如果下载失败,我必须以一种超时的方式进行构建。

该代码每秒检查一些下载目录中的文件名,并在文件名完成或退出时间超过20秒后退出。返回的下载时间用于检查下载是否成功或是否超时。

import time
import os

def download_wait(path_to_downloads):
    seconds = 0
    dl_wait = True
    while dl_wait and seconds < 20:
        time.sleep(1)
        dl_wait = False
        for fname in os.listdir(path_to_downloads):
            if fname.endswith('.crdownload'):
                dl_wait = True
        seconds += 1
    return seconds

我相信这仅适用于chrome文件,因为它们以.crdownload扩展名结尾。可能有类似的方法可以签入其他浏览器。

编辑:最近,我更改了.crdownload在没有显示为扩展名的时间使用此功能的方式。本质上,这也只是等待正确数量的文件。

def download_wait(directory, timeout, nfiles=None):
    """
    Wait for downloads to finish with a specified timeout.

    Args
    ----
    directory : str
        The path to the folder where the files will be downloaded.
    timeout : int
        How many seconds to wait until timing out.
    nfiles : int, defaults to None
        If provided, also wait for the expected number of files.

    """
    seconds = 0
    dl_wait = True
    while dl_wait and seconds < timeout:
        time.sleep(1)
        dl_wait = False
        files = os.listdir(directory)
        if nfiles and len(files) != nfiles:
            dl_wait = True

        for fname in files:
            if fname.endswith('.crdownload'):
                dl_wait = True

        seconds += 1
    return seconds

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有