我想填写表单并捕获生成的页面。所以我写了一个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()的返回值可能不同?
答案 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/
在您当前的网址中表示“报告”,因此您在查询的网页数据中。