我正在尝试编写一个从网站下载zip文件的脚本,但该文件是通过javascript调用而不是已知的URL提供的,所以我试图模仿点击该元素进行下载文件:
#! /usr/bin/env python
# -*- coding: utf-8 -*
from selenium import webdriver
meff_data_download_url = "http://www.meff.com/aspx/DerEnergia/DescargaFicheros.aspx?id=esp"
zip_file_javascript_call = "sacaVentana('/docs/Ficheros/Descarga/dME/ME170523.zip')"
if __name__ == '__main__':
browser = webdriver.PhantomJS()
browser.get(meff_data_download_url)
browser.find_elements_by_class_name('zip')[0].click()
程序脚本没有错误地结束,但是没有下载文件。我在其他SO问题中看到了一些示例,他们没有做任何其他额外的事情来实际存储下载的文件,这看起来很奇怪,但我不知道这是不是问题。
任何帮助?
答案 0 :(得分:1)
这是我想出的。您只需将文件位置换出到phantomJS可执行文件所在的位置即可。您还可以修改在最后一行存储下载文件的文件位置:
def Download_PDF():
phantomJSdriver = r'C:\Program Files\PhantomJS\bin\phantomjs.exe'
meff_data_download_url = "http://www.meff.com/aspx/DerEnergia/DescargaFicheros.aspx?id=esp"
main_link = "http://www.meff.com"
driver = webdriver.PhantomJS(phantomJSdriver) # webdriver.PhantomJS() if not Windows
driver.get(meff_data_download_url)
links = driver.find_elements_by_css_selector("a[href*='/docs/Ficheros/Descarga/dME']")
thelinks = [main_link + str(link.get_attribute('href')).split("javascript:sacaVentana('")[1].split("')")[0]
for link in links]
for i in range(0, len(thelinks)):
urllib.request.urlretrieve(thelinks[i], str(i)+'.zip')
答案 1 :(得分:0)
目前,PhantomJS不支持下载。以下是该功能的跟踪票证:https://github.com/ariya/phantomjs/issues/10052
您可以尝试使用新的无头版Chrome,应该可以很好地使用当前的实现。 https://intoli.com/blog/running-selenium-with-headless-chrome/
或者,你可以使用PhantomJS来获取你需要的东西,当你拥有元素时,提取href,并使用python-requests或urllib来检索文件。