如何在python中读取selenium webdriver下载的文件

Kee*_*gan 2 python selenium webdriver web-scraping selenium-webdriver

我在 python 中使用 selenium 和 webdriver 从网站下载 csv 文件。文件被下载到指定的下载目录中。这是我的代码的概述

fp = webdriver.FirefoxProfile()
fp.set_preference("browser.download.folderList", 2)
fp.set_preference("browser.download.manager.showWhenStarting", False)
fp.set_preference("browser.download.dir",'xx/yy')
fp.set_preference('browser.helperApps.neverAsk.saveToDisk', "text/plain, application/vnd.ms-excel, text/csv, text/comma-separated-values, application/octet-stream")
driver = webdriver.Firefox(fp)
driver.get('url')
Run Code Online (Sandbox Code Playgroud)

我需要print将此 csv 的内容发送到终端。许多具有随机名称的类似文件将被下载到同一个文件夹中,因此通过文件名访问该文件将不起作用,因为我事先不知道它是什么

Viv*_*ngh 5

您可以从该位置获取最后下载的文件,然后读取该文件:

path = /path to folder
list = os.listdir(path)
time_sorted_list = sorted(list, key=os.path.getmtime)
file_name = time_sorted_list[len(time_sorted_list)-1]
Run Code Online (Sandbox Code Playgroud)

然后你就可以读取这个文件了。希望没有多个文件通过并行进程到达那里。

编辑:刚刚看到评论说多个实例可供下载,因此您可以使用 urllib 并使用其 url 下载文件:

import urllib
urllib.urlretrieve( "http://www.example.com/yourfile.ext", "your-file-name.ext") // you can provide unique-id to your file name
Run Code Online (Sandbox Code Playgroud)

  • 这不起作用,因为我下载文件的网站需要登录,因此会话数据是由 selenium 完成的。会话数据与 webdriver 对象相关联。所以一个简单的 urlretrieve() 给了我一个 IOError: ('http error', 401, 'Unauthorized') (2认同)