我正在尝试编写一个从网站下载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 问题中看到示例,他们没有做任何其他额外的事情来实际存储下载的文件,这似乎很奇怪,但我不知道这是否是问题所在。
有什么帮助吗?
这是我想到的。您只需要将文件位置换出到phantomJS可执行文件所在的位置即可。您还可以修改在最后一行存储下载文件的文件位置:
def Download_PDF():
phantomJSdriver = r'C:Program FilesPhantomJSbinphantomjs.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')
目前,PhantomJS不支持下载。 这是他们这边对该功能的跟踪票:https://github.com/ariya/phantomjs/issues/10052
您可以尝试使用Chrome的新无头版本,应该可以很好地与您当前的实现配合使用。https://intoli.com/blog/running-selenium-with-headless-chrome/
或者,您可以使用PhantomJS来获取所需的内容,当您拥有元素时,提取href,并使用python-requests或urllib来检索文件。