【问题标题】:Downloading with Python+PhantomJS by emulating a click通过模拟点击使用 Python+PhantomJS 下载
【发布时间】:2017-05-24 20:11:36
【问题描述】:

我正在尝试编写一个从网站下载 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 问题中看到了示例,他们没有做任何其他额外的事情来实际存储下载的文件,这看起来很奇怪,但我不知道这是否是问题所在。

有什么帮助吗?

【问题讨论】:

    标签: python selenium phantomjs


    【解决方案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')
    

    【讨论】:

      【解决方案2】:

      目前,PhantomJS 不支持下载。以下是他们对该功能的跟踪票:https://github.com/ariya/phantomjs/issues/10052

      您可以尝试使用新的无头版本的 chrome,它应该可以很好地与您当前的实现配合使用。 https://intoli.com/blog/running-selenium-with-headless-chrome/

      或者,您可以使用 PhantomJS 来获取您需要的内容,当您拥有元素时,将 href 提取出来,然后使用 python-requests 或 urllib 来检索文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-27
        • 2017-05-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多