【问题标题】:Basic Authentication with CasperJS使用 CasperJS 进行基本身份验证
【发布时间】:2015-03-05 19:31:49
【问题描述】:

Casperjs 有一些问题,因为它在最初加载时没有验证页面,下面是我的代码。

var casper = require('casper').create({
  verbose: false,
  logLevel: 'debug',
  pageSettings: {
    loadImages: false, // The WebPage instance used by Casper will
    loadPlugins: false, // use these settings
  }
});

// print out all the messages in the headless browser context
casper.on('remote.message', function(msg) {
  this.echo('remote message caught: ' + msg);
});

// print out all the messages in the headless browser context
casper.on("page.error", function(msg, trace) {
  this.echo("Page Error: " + msg, "ERROR");
});

//casper.options.viewportSize = {width: 1366, height: 667};

casper.start();
casper.options.pageSettings = {
  customHeaders:{
    'Authorization':'Basic '+btoa('username:password')
  }
}

casper.thenOpen('https://www.dmr.nd.gov/oilgas/basic/getwellprod.asp', function(status) {
  if (status !== 'success') {
    console.log('Unable to access network');
  } else {
    console.log("Getting Authenticated");
    this.echo(this.getTitle());
  }
});

casper.run();

我也尝试过使用 setHttpAuth,但没有成功。这里是 Phantom 版本和 resource.error 消息 - Phantom 版本是 1.9.2,ErrorCode 是 6,描述是 SSL 握手失败

【问题讨论】:

  • 实际上我已经使用了 casper.capture() 但它是一个空白图像..
  • 这里是先生,Phantom 版本是 1.9.2,ErrorCode 是 6,描述是 SSL 握手失败
  • 所以如果我升级到 Phantom 2,CasperJs 似乎有问题,我确实更改了 bootstrap.js 中的版本功能,但仍然是同样的问题。我也尝试过你在其他帖子中所说的使用“任何”,但在这种情况下它不起作用
  • 我使用来自 github master 分支的 CasperJS,它与 PhantomJS 2 完美配合,但您不需要 更新。只需使用命令行选项。我更新了我的答案。

标签: javascript phantomjs casperjs basic-authentication


【解决方案1】:

贵宾犬

来自resource.error 的错误消息表明这是一个 POODLE 错误。 PhantomJS

--ssl-protocol=tlsv1

您也可以将--ignore-ssl-errors=true 扔进去。

更多信息在这里:CasperJS/PhantomJS doesn't load https page

基本认证

pageSettings 没有 customHeaders 选项。您可能打算使用 PhantomJS 的 customHeaders 选项:

casper.page.customHeaders:{
    'Authorization': 'Basic '+btoa('username:password')
};

更好的方法是为此使用适当的设置:

casper.options.pageSettings = {
    userName: username,
    password: password
};

您也可以在创建过程中定义它。

如果这不能解决您的问题,请检查 resource.requestedresource.received 事件是否设置了标头。

回调参数

您的代码的另一个问题是没有status 用于回调thenOpen 和其他步进函数。最后成功加载的资源对象被传递给回调而不是字符串。因此,您无法检测页面是否已成功加载。

【讨论】:

  • 我的回答有帮助吗?添加 POODLE 备注后我忘记 ping 你了。
猜你喜欢
  • 2015-08-12
  • 2017-06-13
  • 2013-05-30
  • 2016-05-31
  • 2017-10-06
  • 2013-09-14
  • 2010-12-11
  • 2016-08-24
  • 2017-08-01
相关资源
最近更新 更多