我正在尝试使用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无效,我无法更改,但它在字段更新之前有效,所以我不这样做认为这是相关的。
由于