用CasperJS提交表内容



我试图使用CasperJS填充两个字段,提交一个表单,并打印出下面页面的内容。但是,我似乎没有成功地单击按钮转到下一页。我试图遵循教程/CasperJS的例子和答案,就像如何登录到一个网站与CasperJS?然而,不同之处在于,我提交的不是一个表格,而是一个包含几个已填写值的表格。

请找到我的代码如下:

var casper = require('casper').create();
casper.start('https://a836-propertyportal.nyc.gov/Default.aspx', function() {});

casper.evaluate(function(block, lot) {
    document.querySelector('#ctl00_SampleContent_ctl01_txtBlock').value = block;
    document.querySelector('#ctl00_SampleContent_ctl01_txtLot').value = lot;
    document.querySelector('#ctl00_SampleContent_ctl01_btnSearchBBL').click();
}, '01000', '0011');

casper.run(function() {
    // echo results in some pretty fashion
    this.echo('we are this far in the code..');
    // this.echo(this.getPageContent());
    var links = document.querySelectorAll('td.contentDataElement');
    this.echo(links.length);
    for(var i=0; i<links.length; i++) {
        this.echo(links[i]);
    }
});

casper.evaluate不是阶跃函数,但与startrun在同一级别上使用。因此将casper.evaluate改为casper.thenEvaluate

你也不能在casper中访问document,而只能在页面上下文中,就像你调用casper.evaluate一样。

您的固定代码使用casper.getElementsInfo函数来获取所需元素的一些属性。您不能将DOM元素从页面上下文传递给casper,它们的类型必须是number、string、[]或{}。

var casper = require('casper').create();
casper.start('https://a836-propertyportal.nyc.gov/Default.aspx');
casper.thenEvaluate(function(block, lot) {
    document.querySelector('#ctl00_SampleContent_ctl01_txtBlock').value = block;
    document.querySelector('#ctl00_SampleContent_ctl01_txtLot').value = lot;
    document.querySelector('#ctl00_SampleContent_ctl01_btnSearchBBL').click();
}, '01000', '0011');
casper.then(function() {
    // echo results in some pretty fashion
    this.echo('we are this far in the code..');
    // this.echo(this.getPageContent());
    var links = this.getElementsInfo('td.contentDataElement');
    this.echo(links.length);
    for(var i=0; i<links.length; i++) {
        this.echo(JSON.stringify(links[i]));
    }
});
casper.run();

最新更新