使用phantomjs进行Windows身份验证

时间:2013-11-19 20:02:10

标签: c# phantomjs windows-authentication

我正在研究phantomjs作为我最新项目中UI自动化的可能解决方案,但我似乎无法让Windows身份验证正常工作。我已尝试设置page.settings.userNamepage.settings.password,但下面的代码段总是得到 401 ,而底层堆栈则不会解决问题。我的搜索失败了,所以我来到社区寻求帮助。

var page = require('webpage').create();

page.onResourceReceived = function(response) {
    phantom.exit(response.status);
};

page.open('http://bing.com');

3 个答案:

答案 0 :(得分:2)

有一个开放的PhantomJS Issue正在进行讨论。似乎PhantomJS不支持(自动/集成)NTLM身份验证,这意味着它不适用于需要集成Windows身份验证的服务器。

答案 1 :(得分:0)

您可以将域凭据添加到网址:

var driver = new PhantomJSDriver();
driver.Manage().Window.Size = new System.Drawing.Size(1024, 1024);
driver.Url = "http://myusername:mypassword@localhost/myapp";

我认为这可能是第2版,我不确定。 AFAIK不支持传递当前用户的凭据,这是一种耻辱。

答案 2 :(得分:0)

对我来说这个案子很完美。 mike-rogers solution

var _driverOptions = new PhantomJSOptions();
var _driverService = PhantomJSDriverService.CreateDefaultService();
_driverOptions.AddAdditionalCapability("phantomjs.page.settings.userAgent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36");
_driver = new PhantomJSDriver(_driverService, _driverOptions);


using (Impersonation.LogonUser(domain, login, pass, LogonType.Interactive))
{
    using (var proxy = new NtlmProxy(new Uri("http://yoursite.com/"), options))
    {
        _driver.Navigate().GoToUrl(url);
    }
 }