【问题标题】:Setting page and form with casperjs使用 casperjs 设置页面和表单
【发布时间】:2019-09-06 17:34:38
【问题描述】:

您好,我需要使用浏览器自动化在我的站点中抓取结果信息。我有这个脚本:

var casper = require('casper').create(); console.log("casper 创建成功");

casper.start("https://portale.spefin.it/anagraph/legalperson/atc", function() { console.log("连接 URL 正常");

// set a wait condition to make sure the page is loaded (particularly iframe in my case)

    //fill out the form 
    this.fillSelectors("form[name='login']",{
        'input#username' : "XXXXXXXXX",
        'input#pw' : "XXXXXXXX"
    });
    console.log("Renseignement login et pass OK");

    // click the login button 
    this.click("button[type='submit']");
    console.log("Passage bouton login OK");


    // switch to iframe (won't be necessary for most)
    this.page.switchToChildFrame('https://portale.spefin.it/anagraph/legalperson/atc');
    console.log("Switch page OK");

    this.wait(5000,function(){
console.log("Attente 5 sec OK");

    this.fillSelectors("form[name='advancedFilterForm']",{
       'input#tax_code' : "11057560150"


    });
    console.log("partita iva ok!");

        // Test d'une zone sur la page pour valider la connexion
        //casper.waitForSelector('.area-status', function() {
        //console.log("Validation element sur la page OK");
        //});
}); 

});

问题是页面没有设置,表单没有找到......请帮帮我!

【问题讨论】:

  • 登录正常!第二页和表单不行!

标签: casperjs


【解决方案1】:

首先,我建议使用verboselogLevel 进行如下测试:

var casper = require('casper').create({
    verbose: true,
    logLevel: "debug"
});

您还可以更频繁地使用then 承诺。 相信我,这对很多人都有帮助

使用waitForSelector 进行救援。

在下面找到您的代码的不同版本。

casper.start("https://portale.spefin.it/anagraph/legalperson/atc").then(function(){
    this.waitForSelector("form[name='login']", function(){
        /*form found*/

        //the [true] parameter will submit the form, no need for the button click
        this.fillSelectors("form[name='login']",{
            'input#username' : "XXXXXXXXX",
            'input#pw' : "XXXXXXXX"
        }, true);

        this.then(function(){
            //possibly no need for the wait but...
            //if you really want to use it
            this.wait(5000,function(){
               //In my honest opinion you don't need the [switchToChildFrame]
               //but instead use [waitForSelector]

               this.waitForSelector("form[name='advancedFilterForm']", function(){
                   /*form found*/

                   //the [true] parameter will submit the form
                   this.fillSelectors("form[name='advancedFilterForm']",{
                       'input#tax_code' : "11057560150"
                   }, true);

                   this.then(function(){
                       this.waitForSelector(".area-status", function(){
                           /*element found*/
                           //do what you must perhaps get the info

                           require('utils').dump(this.getElementInfo('.area-status'));

                       }, function(){
                           /*element not found*/
                       })
                   });

               },function(){
                   /*could not find advancedFilterForm*/
               })
            });
        });

    },function(){
        /*form not found*/
    });
});

注意:此代码未经测试。

希望对您有所帮助。 :)

很好的刮片

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多