【问题标题】:Is it possible to know what file is downloaded by Firefox with Selenium是否有可能知道 Firefox 使用 Selenium 下载了什么文件
【发布时间】:2011-05-04 13:46:33
【问题描述】:

首先,对不起我的英语

我正在使用 Selenium RC 在 Python 中编写一些脚本。 目的是访问一些网站,下载一些文件 我想知道,在脚本的最后,究竟下载了哪些文件

那一刻,我做的事情有点天真,即检查出现在 Firefox 下载目录中的新文件,它运行良好,但如果我同时启动多个客户端,它们无法检测到他们拥有哪些文件等等......

所以我试图找到解决该问题的方法,如果可以处理从 Firefox 下载以确切知道下载发生的时间以及下载的内容,那么我会非常好,但到目前为止,我还没有'找不到任何关于那个

感谢您的帮助

【问题讨论】:

    标签: python firefox selenium download firefox-addon


    【解决方案1】:

    在这种情况下,只需每次创建一个新文件夹并在那里下载您的文件。 如果文件夹名称已经存在,请确保它增加(例如:文件夹 1、文件夹 2、文件夹 3 .....)

    【讨论】:

      【解决方案2】:

      我自己没有尝试过,但我会考虑设置多个 Firefox 配置文件,每个配置文件都设置有不同的下载目录,然后告诉我的实例使用这些配置文件(或者如果您使用 Selenium2,可能以编程方式设置配置文件值 -我不确定下载目录是否可以更改)。然后,您可以继续监视每个目录并查看每个会话下载的内容。

      【讨论】:

        【解决方案3】:

        好吧,我找到了一些东西来回答我的问题(仅限 Firefox),代码足够清晰易懂(您应该参考 Firefox API 中 moz_downloads 中的状态和目标)

        def check_download(self):
            isDownloading = False
            t = 0
            while t != 60 or isDownloading:
                shutil.copy(os.path.join(self.finalFolder, "downloads.sqlite"), os.path.join(self.log_dir, self.sessionId+"downloads.sqlite"))
                conn = sqlite3.connect(os.path.join(self.log_dir, self.sessionId+"downloads.sqlite"))
                c = conn.cursor()
                c.execute("select state, target from moz_downloads")
                print '<waiting for download>'
                for row in c:
                    dlState = row[0]
                    dlTarget = row[1]
                    if dlState == 0 or dlState == 7 or dlState == -1:
                        isDownloading = True
                    if self.verbose:
                        print "status: {0} | target: {1}".format(dlState, dlTarget)
                    if dlState == 1:
                        filenameExpected = os.path.join(self.download_dir, os.path.split(dlTarget)[1])
                        self.writeline_log("FILE;" + filenameExpected + ';')
                        return
                c.close()
                conn.close()
                time.sleep(1)
                t = t + 1
        

        【讨论】:

          【解决方案4】:

          如果你正在使用 python-->Selenium RC 为什么不直接 创建一个 lastdownload.txt 类型的文件,并输入日期、文件名 您下载的文件。

          所以每次你的脚本运行时,它都会检查文件服务器和你的日志文件 查看哪些文件是新文件,哪些文件您已经拥有。 (如果使用相同的文件名 您可以检查标题的 lastupdatetime,甚至是文件大小作为比较的一种方式)

          然后您只需下载新文件...这样您就可以复制一个简单的增量机制,查找 txt 文件...

          【讨论】:

          • 该解决方案的问题在于,如果有多个客户端连接到同一服务器并同时使用 Selenium RC 下载一些文件,则无法知道哪个客户端下载了哪个文件。例如,如果client1同时下载file1和client2同时下载file2,那么该解决方案将暗示client1和client2同时下载了两个文件
          猜你喜欢
          • 2016-11-28
          • 2013-09-06
          • 1970-01-01
          • 2022-10-18
          • 1970-01-01
          • 2023-04-08
          • 1970-01-01
          • 2010-10-20
          • 2013-04-07
          相关资源
          最近更新 更多