如何在使用phantomjs

时间:2018-03-06 05:34:48

标签: javascript web-scraping phantomjs

我正在开展一个项目,我需要废弃网页,所以我经历了教程,我发现phantomJs将是最好的选择。因为它允许我们获取angularJs站点和基于ajax的视图站点的HTML内容,我已经为它编写代码并且工作正常,但问题是我无法获得css和js文件,如果它只写了短文件的路径。

如果受害者使用网站的完整网址,如下所示

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

它工作正常,因为受害者正在使用我可以使用的js的完整URL。 但如果受害者正在使用网址

<script src="assets/js/jquery.min.js"></script>

然后这对我来说是一个问题我无法获得当前HTML内容的css和js,所以就我所做的我写了一些幻像代码。我已在下面发布。

 var page = new WebPage()
    var fs = require('fs');

    page.onLoadFinished = function() {
      console.log("page load finished");
      page.render('export.png');
      fs.write('1.html', page.content, 'w');
      phantom.exit();
    };

    page.open("http://insttaorder.com/", function() {
      page.evaluate(function() {
      });
    });

我需要的是,我需要在我的本地计算机上使用所有css和js文件,我在google,GitHub上搜索过但没有得到任何特定的解决方案,

2 个答案:

答案 0 :(得分:2)

解决任务的策略是:

  • 在PhantomJS中打开页面
  • 枚举JS和CSS资源的所有链接
  • 全部下载

虽然可以使用PhantomJS 来下载和保存文件,但这样做会非常不理想。相反,让我们遵循unix philisophy,一个程序应该只完成一项工作,但做得好。我们将使用优秀的wget实用程序从PhantomJS准备的列表中下载文件。

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

page.open('http://insttaorder.com/', function(status) 
{
    // Get all links to CSS and JS on the page
    var links = page.evaluate(function(){

        var urls = [];

        $("[rel=stylesheet]").each(function(i, css){ 
            urls.push(css.href);
        });

        $("script").each(function(i, js){
            if(js.src) {
                urls.push(js.src);
            }
        });

        return urls;
    });

    // Save all links to a file
    var url_file = "list.txt";
    fs.write(url_file, links.join("\n"), 'w');

    // Launch wget program to download all files from the list.txt to current folder
    require("child_process").execFile("wget", ["-i", url_file], null, function (err, stdout, stderr) {

      console.log("execFileSTDOUT:", stdout);
      console.log("execFileSTDERR:", stderr);

      // After wget finished exit PhantomJS
      phantom.exit();

    });

});

答案 1 :(得分:1)

您可以通过onResourceRequested活动获取所有请求的资源。 通过检查请求方法和URL,您可以过滤掉您不想要的资源,并在以后自行下载。

您无需担心路径,您从活动中获得的url始终是完整的。

var webPage = require('webpage');
var page = webPage.create();

page.onResourceRequested = function(req) {
  if(req.method === 'GET')
    if(req.url.endsWith('.css')) console.log('requested css file', JSON.stringify(req));
    else if (req.url.endsWith('.js')) console.log('requested js file', JSON.stringify(req));
};

有关onResourceRequested

的更多信息