【问题标题】:Get files from javascript function从 javascript 函数中获取文件
【发布时间】:2016-01-29 10:08:03
【问题描述】:

需要使用 Python 从site 下载文件。 文件列表是用JS函数生成的。

//<![CDATA[




$(document).ready(function(){
        var url='/portalfront/portal/list/list-files.php';
        var data={paths:'/portalfront/nedlast/no/markets/analyser-rapporter/norske/anbefalte-aksjer/|usename=Anbefalte aksjer|count=52'};

        var myElement=Portal.getLocalizedString("PostError") || 'error';
        jQuery.ajax({
            url:url,
            data:data,
            dataType: "json",
            success: function(jdata) {           
                if(jdata.status.match(/ok/i)){
                    myElement='';
                    $.each(jdata.data, function(messageIndex, message) {
                         myElement+='<p class="moduleItemPdf"><a target="_blank" href="'+message['path']+'" class="moduleItem">'+message['date']+' '+message['name']+'</a></p>';
                    });             
                }
            },
            complete:function(xhr,status) {
                var _id="div#"+"anbefalte-aksjer-arkiv";
                $(_id).append(myElement);
                if($(_id).closest('div#column_right').length==0){
                    var e=parseInt($(_id).height());
                    var _height=40+(0 * 20);
                    $(_id).closest('.moduleWhite').height(e+_height);
                    Portal.alignModulesVertically();
                }
            }
        });
});



            //]]>

问题是我对 JS 不熟悉。 我想我必须使用 Selenium 来完成这项任务,我认为它应该像这样:

url = 'https://www.dnb.no/bedrift/markets/analyser/arkiv/anbefalteaksjer.html'
wd = webdriver.Firefox()
wd.get(url)
links_script = wd.execute_script(js script)
  1. 我应该在函数中添加什么?
  2. 我应该得到什么?会是html吗?
  3. 如何下载此文件?我的意思是我如何才能收到它的链接?

【问题讨论】:

    标签: python selenium


    【解决方案1】:

    您可以使用 Selenium 获取文件列表,然后使用 Python 下载它。 可以试试下面的代码吗?

    代码:

    def download_file(url):
        local_filename = url.split('/')[-1]
        r = requests.get(url, stream=True)
        with open(local_filename, 'wb') as f:
            for chunk in r.iter_content(chunk_size=1024): 
                if chunk: 
                    f.write(chunk)
        return local_filename
    
    wd.get('https://www.dnb.no/bedrift/markets/analyser/arkiv/anbefalteaksjer.html')
    time.sleep(5) 
    
    pdfLinks = wd.find_elements_by_css_selector('.moduleItemPdf > a')
    
    for linkElement in pdfLinks:
        filename=download_file(linkElement.get_attribute("href"))
        print(filename)
    
    
    
    time.sleep(5)
    wd.quit()
    

    【讨论】:

    • 我刚刚用完整的源代码更新了这个答案。请注意,您必须在此代码之前创建网络驱动程序“wd”。
    • 请原谅我的无知,我刚刚回答了这个问题,但我对解决方案很感兴趣:我应该安装什么软件才能运行这个脚本?或者我在哪里可以找到有关此的完整指南?什么是硒?我对编码不太了解,但我需要解决类似的问题。请帮帮我。
    猜你喜欢
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 2011-09-10
    • 2012-04-21
    • 2016-01-07
    相关资源
    最近更新 更多