0

次のWebサイトの表を抽出しようとしています

http://projects.wsj.com/jettracker/#a=HYA&d=BED&e=2011-01-01&m=indv&o=EMC+CORP.&p=0&s=2007-01-01&sort=d&t=N125TM,N424TM,N448TM,N67TM ,N866TM&v=テーブル

URL はページ 2 に変わりますが、一時停止に関係なく、同じテーブルがスクリーンショットまたは保存された .doc ファイルに表示されます。Web サイトでページ 2 をクリックすると、表が自動的に更新されます。どんな助けでも大歓迎です。

以下は私のコードです

var casper = require('casper').create();
var fs = require('fs');
casper.start('http://projects.wsj.com/jettracker/#a=HYA&d=BED&e=2011-01-     01&m=indv&o=EMC+CORP.&p=0&s=2007-01-01&sort=d&t=N125TM,N424TM,N448TM,N67TM,N866TM&v=table', function() {

this.capture("crap0" + ".png");
var firstRow = this.evaluate(function () {
    var elements = __utils__.getElementsByXPath('//*[@id="table_results"]/table');
    return [].map.call(elements, function(element) {
        return element.innerText;
    });

});

fs.write('pook.doc', firstRow, 'w');

});

casper.then(function() {
 //Click on 1st result link
this.click({
type: 'xpath',
  path: '//*[@id="results-pagination"]/div/a[3]'
});

 // var url ='http://projects.wsj.com/jettracker/#a=HYA&d=BED&e=2011-01-01&m=indv&o=EMC+CORP.&p=1&s=2007-01-01&sort=d&t=N125TM,N424TM,N448TM,N67TM,N866TM&v=table'
//this.open(url);

this.waitFor(function check() {
    return (this.getCurrentUrl() === 'http://projects.wsj.com/jettracker/#a=HYA&d=BED&e=2011-01-01&m=indv&o=EMC+CORP.&p=1&s=2007-01-01&sort=d&t=N125TM,N424TM,N448TM,N67TM,N866TM&v=table');
    },
function then() { // step to execute when check() is ok
    this.echo('Navigated to page 2', 'INFO');
},
function timeout() { // step to execute if check has failed
    this.echo('Failed to navigate to page 2', 'ERROR');
});
this.capture("crap" + ".png");

this.wait(20000, function() {
    this.echo("I've waited for 20 seconds.");
});
var firstRow2 = this.evaluate(function () {
    var elements2 = __utils__.getElementsByXPath('//*[@id="table_results"]/table');
    return [].map.call(elements2, function(element2) {
        return element2.innerText;
    });

});

fs.write('poop.doc', firstRow2, 'w');
});


casper.run();
4

1 に答える 1

0

あなたは近くにいました!ページ コンテキストに動的コンテンツが含まれている場合にのみ、waitFor() 関数を使用する必要があります。そうではありません。

試す:

var casper = require('casper').create();
var fs = require('fs');

casper.start('http://projects.wsj.com/jettracker/#a=HYA&d=BED&e=2011-01-01&m=indv&o=EMC+CORP.&p=0&s=2007-01-01&sort=d&t=N125TM,N424TM,N448TM,N67TM,N866TM&v=table', function() {

    this.capture("crap0" + ".png");

    var firstRow = this.evaluate(function () {
        var elements = __utils__.getElementsByXPath('//*[@id="table_results"]/table');
        return [].map.call(elements, function(element) {
            return element.innerText;
        });
    });

    fs.write('pook.doc', firstRow, 'w');
});

casper.then(function() {
    //Click on 1st result link
    this.click({
        type: 'xpath',
        path: '//*[@id="results-pagination"]/div/a[3]'
    });

    casper.then(function() {

        this.capture("crap" + ".png"); 

        var firstRow2 = this.evaluate(function () {
            var elements2 = __utils__.getElementsByXPath('//*[@id="table_results"]/table');
            return [].map.call(elements2, function(element2) {
                return element2.innerText;
            });

        }); 

        fs.write('poop.doc', firstRow2, 'w');
    });
});

casper.run();
于 2013-05-23T13:34:50.693 に答える