关于 javascript:casperjs 按钮单击不会导航到下一页

casperjs button click doesn't navigate to next page

我有一个页面,其中包含带有 javascript 设置的 HTML 表单,例如,如果您单击带有 someid 的按钮,表单就会被提交。我通过在浏览器控制台中触发来验证了这一点:

document.getElementById("arcotsubmit").click()

一旦它被触发,url就会改变并且表单被提交。

现在我尝试用 casper.js 复制它:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var casper = require('casper').create({});


casper.start('https://cib.icicibank.com/corp/BANKAWAY?Action.CorpUser.Init1.001=Y&AppSignonBankId=ICI&AppType=corporate', function() {
    this.echo(this.getTitle());
});

casper.then(function(){

    this.click("#arcotsubmit");

});

casper.then(function(){

    console.log(this.getCurrentUrl())
});

casper.run();

它停留在同一个 URL 并下载同一个页面。我想下载casper单击按钮后出现的html。该 URL 是实时的,可以直接测试。

我的意思是我是否可以在浏览器控制台中使用此命令

1
document.getElementById("arcotsubmit").click()

并使其重定向,为什么我无法做到这一点
this.click("#arcotsubmit") in casperjs?


它是提交而不是点击重定向。 input[type=image] 的默认事件是提交,所以试试这个:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
casper.test.begin('Test page.', 2, function suite(test) {
    casper.start(
        'https://cib.icicibank.com/corp/BANKAWAY?Action.CorpUser.Init1.001=Y&AppSignonBankId=ICI&AppType=corporate',
        function() {
            this.echo(this.getTitle());
            test.assertUrlMatch(/BANKAWAY?/, 'Current location is ' + this.getCurrentUrl());
        }
    );

    casper.then(function(){
        this.fill('#rt', {}, true);
        this.wait(2000, function() {
            test.assertUrlMatch(/BANKAWAY;/, 'New location is ' + this.getCurrentUrl());
        });
    });

    casper.run(function() {
        test.done();
    });
});

会通过的。
测试结果截图


可能的快速修复。如果 Casper 的点击不起作用,但您的代码在浏览器的控制台中运行,请尝试使用 Casper 的评估功能。

1
2
3
4
5
casper.then(function() {
  this.evaluate(function() {
    document.getElementById("arcotsubmit").click();
  });
});