首先,我很抱歉我的英文
我正在使用Selenium RC在Python中编写一些脚本。 目的是访问一些网站,并下载一些文件 我想知道,在脚本的最后,确切地下载了哪些文件
那一刻,我正在做一些天真的事情,即检查出现在Firefox下载目录中的新文件,它运行良好但是如果我在同一时间启动多个客户端,则无法检测到他们拥有哪些文件等...
所以我试图找到解决这个问题的方法,如果有可能从Firefox处理下载以确切知道下载何时发生,以及下载了什么,那么我会非常好,但到目前为止,我还没有什么都找不到
感谢您的帮助
答案 0 :(得分:0)
如果你正在使用python - > Selenium RC你为什么不这么做 创建lastdownload.txt类型的文件,并输入日期,文件名 您下载的文件。
因此,每次脚本运行时,它都会检查文件服务器和日志文件 查看哪些文件是新文件,哪些文件是您已有的文件。 (如果使用相同的文件名 您可以检查标题的lastupdatetime,甚至可以检查文件大小作为比较的方法)
然后你只需要下载新文件......这样你就可以通过查找txt文件复制一个简单的增量机制......
答案 1 :(得分:0)
好吧,我找到了解决问题的方法(仅限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
答案 2 :(得分:0)
我自己没有尝试过,但我会考虑设置多个Firefox配置文件,每个配置文件使用不同的下载目录,然后告诉我的实例使用这些配置文件(或者如果您使用Selenium2,可能以编程方式设置配置文件值 - 我不确定下载目录是否可以更改)。然后,您可以继续监视每个目录并查看为每个会话下载的内容。
答案 3 :(得分:0)
在这种情况下,每次只需创建一个新文件夹并在那里下载文件。 如果foldername已经退出,请确保它已递增(例如:folder1,folder2,Folder3 .....)