CasperJS形式的AJAX结果不会出现

时间:2014-04-29 17:54:49

标签: ajax webforms casperjs

我试图在表单提交后抓取一些网站结果。

使用Chrome开发者工具控制台,我可以填写表单并提交。在“网络”选项卡上,有两个POST,然后结果显示在页面上。

我试图用CasperJS模仿这个过程失败。

var casper = require('casper').create({
clientScripts: ["./jquery.min.js"],
verbose: true,
logLevel: 'debug',
pageSettings: {
    loadImages: false,
    loadPlugins: false,
    userAgent: 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.2 Safari/537.36',
    webSecurityEnabled: false,
}
});

casper.start('https://ptabtrials.uspto.gov', function() {});

casper.thenOpen('https://ptabtrials.uspto.gov/prweb/PRWebLDAP2?UserIdentifier=searchuser', function() {
        this.evaluate(function(search){
            return jQuery('input#SearchTrialNumber').attr({'value': search});
        }, 'ipr');

        this.evaluate(function(){
            return jQuery('div.pzbtn-mid:contains("Search")').click();  
        });
});

下一部分是它破裂的地方。看起来页面永远不会刷新新内容,并且该过程会挂起casper.waitUntilVisible

casper.waitUntilVisible("#PEGA_GRID_CONTENT", function(){
        var results = this.evaluate(function(){
            return jQuery("#PEGA_GRID_CONTENT tr.cellCont").size();
        });
        console.log(JSON.stringify(results));
});

终端以[warning] [phantom] Casper.waitFor() timeout回复。使用waitFor()似乎是正确的,因为表单是用AJAX刷新的。

我修改了jQuery以避免$命名空间与现有代码冲突,改为使用jQuery

1 个答案:

答案 0 :(得分:1)

div.pzbtn-mid:contains("Search")上没有点击处理程序。你应该使用:

this.evaluate(function(){
    return jQuery('button:contains("Search")').click();  
});

而不是

this.evaluate(function(){
    return jQuery('div.pzbtn-mid:contains("Search")').click();  
});