【发布时间】:2015-07-29 09:57:58
【问题描述】:
我一直在使用 CasperJS 进行网站抓取项目。这是一个 ASPX 网站。我可以登录到该站点,然后填写运行搜索的表单,但在填写表单后,我无法模拟单击 DIV 按钮。搜索使用 AJAX 运行,但是当我在等待几秒钟后捕获页面时,它不会在捕获的图像中显示结果。 Search 按钮由 DIV 组成,单击它会运行其他隐藏的 JavaScript 函数,这些函数会发送 AJAX 请求以检索搜索结果。
这是我的代码。
var casper = require('casper').create({
clientScripts: ['js/jquery-1.11.3.min.js']
});
var x = require('casper').selectXPath;
casper.userAgent('Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.4; InfoPath.2; SV1; .NET CLR 3.3.69573; WOW64; en-US)');
casper.start('https://example.com/finder.aspx');
casper.then(function () {
this.sendKeys('#UserName', 'xxxxx');
this.sendKeys('#Password', 'yyyyy');
console.log('Fill login credentials');
casper.capture("screen1.png");
this.thenClick('input[type=submit]');
});
casper.wait(3000, function () {
console.log('Login');
casper.capture("screen2.png");
});
casper.then(function () {
this.fill('form[name="searchForm"]', {
'$ddType': 'ABCD',
'$rbGender': '0',
}, true);
});
casper.wait(3000, function () {
this.sendKeys('#Type_I', 'ABCD');
this.sendKeys('#ProviderId', '1111111111');
this.sendKeys('#txtNameFirst', 'My');
this.sendKeys('#txtNameLast', 'Name');
this.sendKeys('#txtZipCode', '11111');
this.sendKeys('#txtBirthDate', '01/11/1987');
console.log('Form filled');
casper.capture("screen3.png");
});
casper.thenClick('#btnSubmit', function () {
console.log('Submitted');
});
casper.wait(3000, function () {
casper.capture("screen4.png");
});
这是需要点击的按钮DIV。
<div id="btnSubmit" class="dxb">
<span>Submit</span>
</div>
screen4.png(与 screen3.png 相同)仅显示已填写的搜索表单,但没有“Loading..”消息(应该在提交点击时显示)或任何结果。如何触发表单提交? 普通表单提交不检索搜索结果。
PS:
我尝试了以下方法来触发evaluate()内的提交按钮。
在文本框中输入 press(实际上会显示结果)
方法一
var e = jQuery.Event("keydown");
e.which = 13;
$("#txtZipCode").trigger(e);
方法二
this.sendKeys('#txtZipCode', casper.page.event.key.Enter, {keepFocus: true});
点击 DIV 按钮。
方法一
$('#btnSubmit div input').trigger('click');
方法二
$('#btnSubmit').click();
方法3
var mouse = require("mouse").create(casper);
this.mouse.click("#btnSubmit");
还是没有运气。
【问题讨论】:
-
通常情况下,CasperJS click 总是有效,但您可以尝试其他方法:stackoverflow.com/questions/15739263/phantomjs-click-an-element
-
@ArtjomB。有没有办法查看远程页面的警报?验证警报?
-
当然,您可以注册很多活动:docs.casperjs.org/en/latest/events-filters.html。 “remote.alert”就是其中之一。
-
@ArtjomB。我在casper创建中添加了verbose:true,logLevel:“debug”,但详细响应没有显示任何div点击。它只显示其他输入框活动。
-
CasperJS Together:请注册
resource.error、page.error、remote.message和casper.page.onResourceTimeout事件 (Example)。可能有错误。
标签: javascript html asp.net phantomjs casperjs