【问题标题】:casperjs: import json and cycle export result jsoncasperjs:导入 json 并循环导出结果 json
【发布时间】:2016-06-13 15:20:09
【问题描述】:


我需要在 casperjs 中导入一些链接并在 json 或其他任何内容中导出结果 html,但是如果我在一个文件中有 100 万个链接,我需要一些自动的东西,比如从 json(example) 调用每个链接的循环然后用 casperjs 提取 html,然后写在文件 json 或其他文件中。这是我的脚本,但写入文件而不是在某些文件 db、json 或 csv 中获取链接。如何根据需要修改此脚本?:

var casper = require('casper').create({
    pageSettings: {
        loadImages: true,
        loadPlugins: false,
        userAgent: 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36',
        javascriptEnabled: true,
        verbose: true,
        logLevel: "debug",
        cookiesEnabled: true
    }

});

var fs = require('fs');
var x = require("casper").selectXPath;
phantom.cookiesEnabled = true;
phantom.javascriptEnabled = true;

casper.start().thenOpen("LINK_LOGIN", function() {
    console.log("Link opened...");
    });
casper.then(
    function() {
        casper.echo("clicking..");
        casper.click(x("/html/body/div[@id='whais']/ul[@id='undest']/li[@id='login-you']/a"));
    });

casper.then(function(){
    console.log("Login...");
    this.sendKeys('input[id="login"]', 'USER');
    this.sendKeys('input[id="password"]', 'PASSWORD');
    casper.echo("click");
    casper.click('input[type="submit"][name="form"]');  
    this.evaluate(function(){
        document.getElementById("button-send").click();
    });

});

casper.thenOpen("OTHER_LINK_SAME_DOMAIN", function() {    
    console.log("page loading...");
    console.log("...write html");
    var html = this.getHTML();
    var f = fs.open('my.html', 'w');
    f.write(html);
    f.close();

}).waitForText("how are you?", function() {
    this.echo('Found the answer.');
},
function() {
    this.echo('not found answer, time out!');
},60000
);

casper.run();

谢谢!!!

【问题讨论】:

  • 请看我的回答...如果您仍有疑问,请随时发表评论...

标签: json database csv casperjs


【解决方案1】:

我在一个文件中有 100 万个链接。

首先您应该阅读该文件的内容。看看fs.read

我需要一些自动的东西,比如从 json(example) 调用每个链接的循环,然后使用 casperjs 提取 html,然后写入文件 json 或其他内容。

使用循环打开每个网址,然后保存。示例代码:

var url_list = [...]// contains the url from the local file

casper.start()
var index = 0;
casper.then(function () {
        for (var i = 0; i < url_list.length; i++) {
            casper.thenOpen(url_list[i], function () {
                fs.write(index + '.html', this.getHTML(), 'w')
                index ++
            })
        }
    }
)

【讨论】:

  • 谢谢你的好回答,如果我现在才看到,很抱歉......再次感谢你!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-22
  • 2014-11-12
  • 1970-01-01
  • 2019-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多