2017-05-24 76 views
0

我试图写一个脚本,从下载网站中的zip文件,但文件送达JavaScript调用,而不是与已知的URL与Python + PhantomJS下载,所以我想模拟点击元素下载文件:通过模拟点击

#! /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问题,他们没有尽到实际存储下载的文件,这似乎很奇怪任何其他附加的东西,但如果这就是问题所在,我不知道。

任何帮助?

回答

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