gpt4 book ai didi

phantomjs - 在PhantomJs中下载作为POST请求响应附件的文件

转载 作者:行者123 更新时间:2023-12-03 14:57:36 26 4
gpt4 key购买 nike

我想下载一个CSV文件,它是在通过POST请求单击按钮时生成的。我在casperJs和phantomJS论坛上进行了最大程度的研究,然后空手而归。在像firefox这样的普通浏览器中,发布请求后会出现一个浏览器下载对话框窗口。如何在PhantomJS中处理这种情况

TTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Vary: Accept-Encoding
Server: Microsoft-IIS/7.5
Content-disposition: attachment;filename=ExportData.csv
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Date: Fri, 19 Apr 2013 23:26:40 GMT
Content-Length: 65183

最佳答案

我找到了一种使用casperjs的方法(如果您使用XMLHttpRequest实现下载功能,它应该仅与phantomjs一起工作,但我没有尝试过)。

我将留下一个工作示例,该示例尝试从this page下载mos最新的PDF。当您单击下载链接时,将触发一些javascript代码,这些代码将生成一些隐藏的输入字段,然后将它们过帐。

我们要做的是替换表单的onsubmit函数,以便取消提交,并获取表单目标(操作)及其所有字段。我们稍后将使用此信息进行实际下载。

var casper=require('casper').create();
casper.start("https://sede.gobcan.es/tributos/jsf/publico/notificaciones/comparecencia/ultimosanuncios.jsp", function() {

var theFormRequest = this.page.evaluate(function() {
var request = {};
var formDom = document.forms["resultadoUltimasNotif"];
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
}

//Trigger the click on the link.
var link = $("table.listado tbody tr:first a");
link.click();

return request; //Return the form data to casper
});

//Start the download
casper.download(theFormRequest.action, "downloaded_file.pdf", "POST", theFormRequest.data);
});

casper.run();


注意:您必须使用--ignore-ssl-errors运行它,因为它们使用的CA不在您的浏览器默认CA列表中。

casperjs --ignore-ssl-errors=true downloadscript.js

关于phantomjs - 在PhantomJs中下载作为POST请求响应附件的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16144252/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com