一尘不染

如何在Python中读取Selenium Webdriver下载的文件

selenium

我在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')

我需要print将此csv的内容发送到终端。许多具有随机名称的相似文件将被下载到同一文件夹中,因此无法通过文件名访问文件,因为我不知道它将是什么提前


阅读 294

收藏
2020-06-26

共1个答案

一尘不染

这个答案是由以前的堆栈溢出问题,答案以及本文中的注释组成的,所以谢谢大家。

我为这个解决方案结合了selenium webdriver和python
request模块。我实质上是使用Selenium登录该站点的,从webdriver会话中复制了cookie,然后使用了request.get(url,cookies
= webdriver_cookies)来获取文件。

这是我的解决方案的要点

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)

# selenium login code ...

driver_cookies = driver.get_cookies()
cookies_copy = {}
for driver_cookie in driver_cookies:
    cookies_copy[driver_cookie["name"]] = driver_cookie["value"]
r = requests.get('url',cookies = cookies_copy)
print r.text

我希望这可以帮助某人

2020-06-26