尝试使用CasperJS填充时找不到表单

时间:2014-02-01 13:20:22

标签: javascript css-selectors casperjs

我正在学习CasperJS并希望尝试一个简单,有用的任务。我想制作一份天然气账单的pdf副本,但我甚至无法登录网站。

我是CT Natural Gas的客户。网址是:

https://www.cngcorp.com/wps/portal/cng/home/mycng/customerWebAccess/

登录应该很简单。它应该只是我的帐号和姓氏。

我的代码是:

var start_url = "https://www.cngcorp.com/wps/portal/cng/home/mycng/customerWebAccess/"
var casper = require('casper').create()

casper.start(start_url, function() {

    this.fill('formid', {
        'input1id': '000000000000',
        'input2id': 'LastName'
    }, true);
    this.capture('cng.png');

})
casper.run()

我的“真实”代码使用网站HTML中显示的完整ID,而不是“formid”或“input1ID”。我没有在上面的示例代码中包含完整的ID,因为我不确定这些ID到底是什么。它们看起来像:viewns_7_LOIGMC7IA21234QWERASDF1234_:custWebLogin。这么多“简单”的身份证。也许这是从WebSphere产品生成的东西?

无论如何,找不到表格。我明白了:

CasperError: Errors encountered while filling form: form not found

我也已经将其破解并将其放入我的start中以查看“看起来像”的形式:

listItems = this.evaluate(function () {
    var nodes = document.querySelectorAll('form');
    return [].map.call(nodes, function(node) {
        return node.id;
    })
})

this.echo(listItems);

返回:

,viewns_7_LOIGMC7IA21234QWERASDF1234_:custWebLogin

我认为表格ID搞砸了。任何人都可以提出任何建议吗?

3 个答案:

答案 0 :(得分:1)

等待加载表单以使用selectors填充表单。使用waitForSelector(),waitFor(),wait()等而不是waitForResource()

casper.start('your_url_here',function(){
    this.echo(this.getTitle());
});

casper.waitForResource("your_url_here",function() {
    this.fillSelectors('#loginform', {
        'input[name="Email"]' : 'your_email',
        'input[name="Passwd"]': 'your_password'
    }, true);
});

答案 1 :(得分:0)

我认为DOM / CSS3 Selectores不能使用此ID,但它适用于xpath:

// Create a function for selectXPath : 
var x = require('casper').selectXPath

var start_url = "https://www.cngcorp.com/wps/portal/cng/home/mycng/customerWebAccess/"
var casper = require('casper').create()

casper.start(start_url, function() {
    // Query xpath with fillSelectors
    this.fill(x('//*[@id="viewns_7_LOIGMC7IA26I00I9TQ9SLI1B12_:custWebLogin"]'), {
        'input1id': '000000000000',
        'input2id': 'LastName'
    }, true);
    this.capture('cng.png');

})
casper.run()

答案 2 :(得分:0)

您需要完整的身份证吗?因为这样的事情可能有用:

this.fill("form[id^='viewns_7_LOIGMC7IA21234QWERASDF1234']", {
    'input1id': '000000000000',
    'input2id': 'LastName'

或者

this.fill("form[id*='LOIGMC7IA21234QWERASDF1234']", {
    'input1id': '000000000000',
    'input2id': 'LastName'