【问题标题】:CasperJS and automating export xml from mediawikiCasperJS 和从 mediawiki 自动导出 xml
【发布时间】:2016-10-14 02:06:57
【问题描述】:

我正在尝试使用 casperjs 自动导出媒体 wiki xml,因为我们无法通过托管它的机器进行访问。问题是 xml 的下载作为其响应是 xml 的发布请求。目前我有以下(另一个票有堆栈溢出带来的是这段代码)

    casper.then(function(){
       var theFormRequest = this.page.evaluate(function() {
          var request = {}; 
          var formDom = document.forms[0];
          formDom.onsubmit = function() {
              //iterate the form fields
              var data = {};
              for(var i = 0; i < formDom.elements.length; i++) {
              data[formDom.elements[i].name] = formDom.elements[i].value;
            }
            request.action = formDom.action;
            request.data = data;
            return false; //Stop form submission
        }

        var link = $(".visualClear").submit();      
        return request; 
    }); 


        this.echo("DOWNLOADING  " + theFormRequest.action + "  " + theFormRequest.data);
        casper.download(theFormRequest.action, "downloaded_file.xml", "POST", theFormRequest.data);
    });

我使用了 resource.received 事件,但这只是给了我响应的元数据,而不是实际数据。目前下载的是 html 页面而不是 xml,我可以确认按钮正在被单击,就像我删除了 formDom.onSubmit 资源一样。received 显示返回的 content.type 是 XML。

虽然它在我的 mediawiki 使用的类方面有所不同,但这里的 mediawiki 页面执行完全相同的操作https://www.mediawiki.org/wiki/Special:Export

谢谢

编辑 这是通过浏览器完成时的响应

Accept-Ranges:bytes
Age:0
Connection:keep-alive
Content-disposition:attachment;filename=file-20161010165904.xml
Content-Length:172717
Content-Type:application/xml; charset=utf-8
Date:Mon, 10 Oct 2016 16:59:04 GMT
Server:nginx
Via:1.1 varnish
X-Content-Type-Options:nosniff
X-Powered-By:HHVM/3.15.1
X-Varnish:1482412076

【问题讨论】:

  • 我不确定您的问题的答案,但如果您尝试获取 wiki 的完整下载,您可能会对 Wikiteam 归档工具感兴趣:github.com/WikiTeam/wikiteam

标签: phantomjs mediawiki casperjs


【解决方案1】:

我会做什么:

casper.start();

casper.open('http://url_to_mediawiki', {
        method: 'GET',
        headers: {
            'Content-Type': 'application/xml; charset=utf-8',
        },
        encoding: 'utf8'
    }
})

casper.then(function() {
    this.echo(this.getPageContent());
})

getPageContent() 与内容无关,它很灵活。它只是渲染它找到的东西。检查casper#getpagecontentcasper#open

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-06
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    相关资源
    最近更新 更多