我试图在表单提交后抓取一些网站结果。
使用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
。
答案 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();
});