2017-05-24 78 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')