当我使用普通浏览器(Chrome)浏览网站A时,当我点击网站A上的链接时,Chrome会以CSV文件的形式下载报告.
当我检查服务器响应头时,我得到以下结果:
Cache-Control:private,max-age=31536000
Connection:Keep-Alive
Content-Disposition:attachment; filename="report.csv"
Content-Encoding:gzip
Content-Language:de-DE
Content-Type:text/csv; charset=UTF-8
Date:Wed, 22 Jul 2015 12:44:30 GMT
Expires:Thu, 21 Jul 2016 12:44:30 GMT
Keep-Alive:timeout=15, max=75
Pragma:cache
Server:Apache
Transfer-Encoding:chunked
Vary:Accept-Encoding
Run Code Online (Sandbox Code Playgroud)
现在,我想使用PhantomJS下载并解析此文件.我设置了page onResourceReceived监听器,看看Phantom是否会接收/下载该文件.
clientRequests.phantomPage.onResourceReceived = function(response) {
console.log('Response (#' + response.id + ', stage "' + response.stage + '"): ' + JSON.stringify(response));
};
Run Code Online (Sandbox Code Playgroud)
当我发出Phantom请求下载文件时(这是page.open('文件的URL')),我可以在Phantom日志中看到该文件已下载.这是日志:
"contentType": "text/csv; charset=UTF-8",
"headers": {
"name": "Date",
"value": "Wed, 22 Jul 2015 12:57:41 GMT"
},
"name": "Content-Disposition",
"value": "attachment; filename=\"report.csv\"",
"status":200,"statusText":"OK"
Run Code Online (Sandbox Code Playgroud)
我收到了文件及其内容,但是如何访问文件数据?当我打印当前的PhantomJS page对象时,我得到了页面A的HTML而我不希望这样,我想要CSV文件,我需要使用JavaScript解析它.
网页上的数据是动态显示的,似乎检查html中的每个更改并提取数据是一项非常艰巨的任务,还需要我使用非常不可靠的XPath.所以我希望能够从XHR数据包中提取数据.
我希望能够从XHR数据包中提取信息,并生成要发送到服务器的"XHR"数据包.提取信息部分对我来说更重要,因为可以通过使用casperjs自动触发html元素来轻松处理信息的发送.
我附上了我的意思截图.
响应选项卡中的文本是我之后需要处理的数据.(已从服务器收到此XHR响应.)
我正在尝试使用PhantomJS下载一些PDF文件.当我单击提交按钮时,没有用于下载PDF的直接URL,因为它调用了一些内部JavaScript函数.
这是我用来下载PDF文件的代码:
page.open(url, function(status){
page.evaluate(function(){
document.getElementById('id').click();
});
});
page.onResourceReceived = function(request){
console.log('Received ' + JSON.stringify(request, undefined, 4));
};
Run Code Online (Sandbox Code Playgroud)
'id'是提交按钮的元素id.这里的问题是,即使我得到响应(内部onResourceReceived回调)作为JSON格式,但我无法将附件保存为某些PDF文件.
当我运行上面的代码时,我得到以下输出作为JSON字符串:
Received {
"contentType": "application/pdf",
"headers": [
// Some other headers.
{
"name": "Content-Type",
"value": "application/pdf"
},
{
"name": "content-disposition",
"value": "attachment; filename=FILENAME.PDF"
},
],
"id": 50,
"redirectURL": null,
"stage": "end",
"status": 200,
"statusText": "OK",
"url": "http://www.someurl.com"
}
Run Code Online (Sandbox Code Playgroud)
请使用PhantomJS建议解决方案.谢谢!
我一直在努力解决这个问题.
我正在尝试下载由Google Adwords"下载报告"按钮生成的CSV文件.我可以点击链接,然后在后台查看资源.问题是,为了下载它,casperJS/phantomJS需要一个文件的URL ...但CSV是在现场生成的,并且与我所在的页面具有相同的URL(在该链接之后只会引导您到达主页,而不是CSV文件所以casperJS无法下载它).
有没有办法在没有URL的情况下保存该资源?
我发现了这个解决方法:在PhantomJs中下载POST请求响应中附件的文件
但不幸的是,谷歌Adwords报告按钮没有我可以参考的形式.
我正在尝试使用以下代码从站点下载csv文件(广告报告).问题是,它将下载HTML页面而不是csv文件.我无法提供登录后面的URL,但是从下面的URL下载Firefox时情况类似
http://www.mozilla.org/en-US/firefox/new/
这是一个GET请求,当我检查元素Network Tab时,get请求被取消.我是Casper的新手,不知道如何处理这些请求.任何帮助,将不胜感激
casper.then(function() {
var downloadURL = "";
this.evaluate(function() {
var downloadURL = "http://www.lijit.com"+jQuery("#dailyCSV").attr('href');
});
this.download(downloadURL, '/Users/Ujwal/Downloads/caspertests/stats.csv');
});
Run Code Online (Sandbox Code Playgroud)
响应标题
Age:0
Cache-Control:max-age=0
Connection:keep-alive
Content-Disposition:attachment; filename=stats.csv
Content-Encoding:gzip
Content-Length:1634
Content-Type:text/x-csv
Date:Sat, 05 Oct 2013 15:28:21 GMT
Expires:Sat, 05 Oct 2013 15:28:21 GMT
P3P:CP="CUR ADM OUR NOR STA NID"
Server:PWS/8.0.16
Vary:Accept-Encoding
X-Px:ms h0-s28.p9-jfk ( h0-s62.p9-jfk), ms h0-s62.p9-jfk ( origin>CONN)
Run Code Online (Sandbox Code Playgroud) 我一直在寻找在osx中进行无头测试的解决方案.但我需要能够保存服务器返回的文件.
我测试了selenium,phantomjs,casperjs,并研究了我能在网上找到的任何东西.
他们都不支持下载.我错过了什么吗?有没有支持下载的无头浏览器/测试框架?
phantomjs ×6
casperjs ×4
javascript ×3
download ×2
ajax ×1
csv ×1
http ×1
selenium ×1
web-scraping ×1