使用Selenium与Python和PhantomJS将文件下载到文件系统

Enc*_*818 20 python selenium download phantomjs selenium-webdriver

我一直在努力使用PhantomJS/Selenium/python-selenium将文件下载到文件系统.我能够轻松浏览DOM并单击,悬停等.然而,下载文件非常麻烦.我尝试过使用Firefox和pyvirtualdisplay的无头方法,但这种方法效果不佳,而且速度令人难以置信.我知道CasperJS允许文件下载.有谁知道如何将CasperJS与Python集成或如何利用PhantomJS下载文件.非常感激.

val*_*tev 18

尽管这个问题很老,但下载文件PhantomJS仍然是一个问题.但我们可以使用PhantomJS获取下载链接并获取所有需要的cookie,例如csrf令牌等.然后我们可以用来requests实际下载它:

import requests
from selenium import webdriver

driver = webdriver.PhantomJS()
driver.get('page_with_download_link')
download_link = driver.find_element_by_id('download_link')
session = requests.Session()
cookies = driver.get_cookies()

for cookie in cookies: 
    session.cookies.set(cookie['name'], cookie['value'])
response = session.get(download_link)
Run Code Online (Sandbox Code Playgroud)

现在response.content应该出现实际的文件内容.我们接下来可以写它open或做任何我们想做的事情.


ale*_*cxe 11

PhantomJS目前不支持文件下载.解决方法的相关问题:

据我了解,您至少有3个选择:

  • 切换到casperjs(你应该在这里留下python)
  • 尝试无头 xvfb
  • 切换到普通的非无头浏览器

以下也是一些可能有用的链接:

  • 似乎文件下载功能已经被添加到PhantomJS中(包括[你链接到的线程](https://github.com/ariya/phantomjs/issues/10052)中的效果评论.但是,我不确定它是否在Selenium中以易于使用的方式暴露. (5认同)