填写字段后无法使用CasperJS提交表单

时间:2015-12-17 18:03:53

标签: phantomjs casperjs

我正在尝试使用CasperJS 1.1.0-beta3和PhantomJS 1.9.8自动填写表单。

如果我加载页面并且没有填写任何字段(文本输入和下拉列表),我可以使用以下方式提交表单: this.click('#_submit_button');

然而,在我以任何方式操纵表格后,我再也无法提交表格了。我尝试使用以下方法填写字段:

document.querySelector('#from').value = '123';
jQuery('#from').val('123');
this.fillSelectors('form', { ... }, false); // Using true won't submit the form

以下是代码:

casper = require('casper').create();
casper.options.pageSettings.loadImages = false;
casper.options.waitTimeout = 120000; // 120 sec
casper.options.viewportSize = {width: 1280, height: 1024};

var errors = [];

var outputDir = '/tmp/downloads';

function logTimestamp(){
    var dt = new Date();
    var utcDate = dt.toUTCString();
    return utcDate + '  ';
}

casper.start('https://domain.com/directory/page/', function() {
    casper.waitForSelector('div[id="abc-xyz"]');
});

casper.then(function() {
    this.wait(1000);
});

casper.then(function() {
    this.echo(logTimestamp() + '1');
});

casper.then(function(){
    casper.evaluate(function(){
        jQuery('#from').val('123');
        jQuery('#to').val('456');
        jQuery('#code').val('P');
        jQuery('#ab-cd-ef').css('background-color','blue');
    });
});

casper.then(function() {
    this.wait(1000);
});

casper.then(function() {
    this.echo(logTimestamp() + '2');
});

casper.then(function() {
    this.capture(outputDir + "/1.png"); 
});

casper.then(function() {
    this.click('#_submit_button');
});

casper.then(function() {
    this.wait(5000);
});

casper.then(function() {
    this.echo(logTimestamp() + '3');
});

casper.then(function() {
    casper.waitForSelector('div[id="abc-xyz"]');
});

casper.then(function() {
    this.capture(outputDir + "/2.png"); 
});

casper.then(function() {
    this.echo(logTimestamp() + '4');
});

casper.then(function() {
    this.exit();
});

casper.on("page.error", function(msg, trace) {
    this.echo("Error:    " + msg, "ERROR");
    this.echo("File:     " + trace[0].file, "WARNING");
    this.echo("Line:     " + trace[0].line, "WARNING");
    this.echo("Function: " + trace[0]["function"], "WARNING");
    errors.push(msg);
});

casper.run(function() {
    if (errors.length > 0) {
        this.echo(errors.length + ' Javascript errors found', "WARNING");
    }else{
        this.echo(errors.length + ' Javascript errors found', "INFO");
    }
    casper.exit();
});

如果我注释掉更新表单字段的3行,则页面提交,1.png具有蓝色背景,2.png具有绿色背景(显示表单已提交)。

但是任何操纵表单的行为都会导致“点击”或提交失败,而且1.png和2.png仍然具有蓝色背景。

没有JavaScript错误。

抱歉,我无法提供相关网页的链接。

如果单独保留表单,为什么提交按钮有效,但在表单字段更改后无法使用?

我认为它可能与提交按钮“id”有关,以下划线开头,这对HTML4无效,我无法更改,但它在字段更新之前有效,所以我不这样做认为这是相关的。

由于

0 个答案:

没有答案