有时使用CasperJS表单填写和捕获失败

时间:2014-01-08 14:26:45

标签: javascript phantomjs casperjs

我想填写表单并捕获生成的页面。所以我写了一个CasperJS(这是我第一次使用CasperJS)归档到目标。我阅读了CasperJS API文档,但仍不确定如何解决问题。

以下是我的代码:

var casper = require('casper').create();
var filename = casper.cli.get(0);
var myear = casper.cli.get(1);
var mmon  = casper.cli.get(2);
var stk_no = casper.cli.get(3);

casper.start('http://www.twse.com.tw/en/trading/exchange/STOCK_DAY/STOCK_DAYMAIN.php', function() {
        this.fill("form[name='date_form']", {
                'myear' : myear,
                'mmon'  : mmon,
                'STK_NO': stk_no
        },true);
});

casper.then(function() {
        this.capture(filename);
        this.echo("Saved screenshot of " + (this.getCurrentUrl()) + " to " + filename);

});

casper.run();

我的命令就像

casperjs test.js picture.png 2013 12 8271

有时候不会生成图片文件,结果证明是失败的:

Saved screenshot of http://www.twse.com.tw/en/trading/exchange/STOCK_DAY/STOCK_DAY.php to picture.png

有时会生成一个图片文件,结果证明是成功的:

Saved screenshot of http://www.twse.com.tw/en/trading/exchange/STOCK_DAY/genpage/Report201312/201312_F3_1_8_8271.php?STK_NO=8271&myear=2013&mmon=12 to picture.png

为什么有时它会起作用并进行捕获但有时会失败?为什么this.getCurrentUrl()的返回值可能不同?

1 个答案:

答案 0 :(得分:0)

当前网址为http://www.twse.com.tw/en/trading/exchange/STOCK_DAY/STOCK_DAY.php时,表示您在开始页面中被阻止并等待重定向,更改您的

casper.then(function() {
        this.capture(filename);
        this.echo("Saved screenshot of " + (this.getCurrentUrl()) + " to " + filename);

});

为:

casper.waitForUrl(/Report/, function() {
        this.capture(filename);
        this.echo("Saved screenshot of " + (this.getCurrentUrl()) + " to " + filename);

});

/Report/在您当前的网址中表示“报告”,因此您在查询的网页数据中。