在 CasperJS 中等待网页警报

Wait for a web page alert in CasperJS

我是 CasperJS 的新手,几个小时后我可以登录并使用它浏览几个网页,但我被这个网站上的警告消息难住了:https://www.macysliquidation.com/

我需要解除警报才能登录。

我的简单(非工作)代码是:

var casper = require('casper').create();
casper.userAgent('Mozilla/12.0 (compatible; MSIE 6.0; Windows NT 5.1)');

casper.on('remote.alert', function(message) {
    this.echo('alert message: ' + message);
    // how do i get rid of the popup??
    this.thenClick();
});

casper.start('https://www.macysliquidation.com/');


casper.then(function() {
    // login here
    this.sendKeys('#txtUsername','username');
    this.sendKeys('#txtPassword','password');
    this.thenClick('#btnLogin');
 });

casper.run(function() {
    // see what went on
    this.capture('page.png');
    this.echo('done').exit();
});

在点击警报之前,登录控件尚未 visible/available。所以上面的jsreturns

Cannot get informations from #txtUsername: element not found

正如您已经注意到的功能 capser.waitForAlert() is available since version 1.1-beta4. You can copy the function from the code 如果您没有时间升级:

casper.waitForAlert = function(then, onTimeout, timeout) {
    ...
};

问题:

警报和确认只是发生,它们不会停止 PhantomJS 和 CasperJS 中的执行。它们也不是页面的一部分,无法点击。

如果您在 CasperJS 中注册错误事件(resource.error and page.error and remote.message 总是一个好主意),您会看到抛出了一个特定的资源错误:

{"errorCode":6,"errorString":"SSL handshake failed","id":1,"url":"https://www.macysliquidation.com/"}

如果您检查了页面的 status,您会发现它没有加载。

解决方案:

运行 CasperJS --ignore-ssl-errors=true 并根据您的 PhantomJS 版本 --ssl-protocol=tlsv1。更多信息 here.