在Casperjs或Phantomjs中获取资源内容[英] Grab the resource contents in CasperJS or PhantomJS

问题描述

我看到Casperjs具有"下载"功能和一个"收到的资源"回调,但我在回调中没有看到资源的内容,我不想将资源下载到文件系统中.<<<<<<<<

我想抓住资源的内容,以便可以在脚本中使用它. Casperjs或Phantomjs是否可以?

推荐答案

没有意识到我可以从文档对象中获取源:

casper.start(url, function() {
    var js = this.evaluate(function() {
        return document; 
    }); 
    this.echo(js.all[0].outerHTML); 
});

更多信息在这里>

其他推荐答案

过去几天这个问题一直在我的路上.代理解决方案在我的环境中不是很干净,因此我发现了Phantomjs的Qtnetworking核心在何时将资源封存.

长话短说,这是我的要旨.您需要cache.js和mimetype.js文件: https://gist.github.com/bshamric/4717583

//for this to work, you have to call phantomjs with the cache enabled:
//usage:  phantomjs --disk-cache=true test.js

var page = require('webpage').create();
var fs = require('fs');
var cache = require('./cache');
var mimetype = require('./mimetype');

//this is the path that QTNetwork classes uses for caching files for it's http client
//the path should be the one that has 16 folders labeled 0,1,2,3,...,F
cache.cachePath = '/Users/brandon/Library/Caches/Ofi Labs/PhantomJS/data7/';

var url = 'http://google.com';
page.viewportSize = { width: 1300, height: 768 };

//when the resource is received, go ahead and include a reference to it in the cache object
page.onResourceReceived = function(response) {
  //I only cache images, but you can change this
    if(response.contentType.indexOf('image') >= 0)
    {
        cache.includeResource(response);
    }
};

//when the page is done loading, go through each cachedResource and do something with it, 
//I'm just saving them to a file
page.onLoadFinished = function(status) {
    for(index in cache.cachedResources) {
        var file = cache.cachedResources[index].cacheFileNoPath;
        var ext = mimetype.ext[cache.cachedResources[index].mimetype];
        var finalFile = file.replace("."+cache.cacheExtension,"."+ext);
        fs.write('saved/'+finalFile,cache.cachedResources[index].getContents(),'b');
    }
};

page.open(url, function () {
    page.render('saved/google.pdf');
    phantom.exit();
});

然后,当您调用phantomjs时,只需确保启用缓存:

phantomjs -disk-cache = true test.js

一些笔记: 我写这本书是为了将图像在页面上获取而不使用代理或拍摄低RES快照. QT在某些文本文件资源上使用压缩,如果将其用于文本文件,则必须处理解压缩.另外,我进行了一项快速测试以吸引HTML资源,并且没有将HTTP标头摆脱结果.但是,这对我很有用,希望其他人会发现它,如果您有特定内容类型的问题,请修改它.

其他推荐答案

我发现,直到phantomjs稍微成熟, > http://code.google.com/p/phantomjs/issues/detail?id=158 这对他们来说有点头疼.

所以你还是想做吗?我选择了更高的事情来完成此操作,并在 https://github.com/allfro/pymiproxy/a

然后我发射

python proxy.py

接下来,我用指定的代理执行phantomjs ...

phantomjs --ignore-ssl-errors=yes --cookies-file=cookies.txt --proxy=127.0.0.1:8080 --web-security=no myfile.js

您可能需要打开安全性,或者这对我来说是不必要的,因为我只刮口一个来源.现在,您应该看到一堆文本流过您的代理控制台,以及它是否以" text/x-comma-comma-separated-values"的模仿类型降落在某些内容上,它将其保存为data.csv.这也将节省所有标题和所有内容,但是如果您来到了这么远,我相信您可以弄清楚如何弹出.

另一个细节,我发现我必须禁用GZIP编码,我可以从我自己的Apache Web服务器中使用Zlib和DeckSpress Data,但是如果它来自IIS,则Demangression会出现错误而且我不确定这部分.

所以我的电力公司不会为我提供API吗?美好的!我们很难做到!

本文地址:https://www.itbaoku.cn/post/1739817.html