2013-08-14 4 views
2

Selenium Server 2.33.0, Selenium Webdriver JS 바인딩 2.34.0 (npm 패키지 "selenium-webdriver") 및 Mac 10.6.8의 PhantomJS 1.9.1을 사용하여 인증하는 데 문제가 있습니다. 나는 또한 다른 JS 바인딩 "webdriverjs"및 "wd"비슷한 결과를 시도 했으므로이 바인딩이 문제가 있다고 생각하지 않습니다.Selenium Webdriver와 PhantomJS를 사용하여 기본 인증을 수행하는 방법은 무엇입니까?

I 설치 Webdriver이 사용 :

return new Webdriver.Builder(). 
    usingServer('http://localhost:4444/wd/hub'). 
    withCapabilities({ 
     "browserName": "phantomjs", 
     "phantomjs.page.settings.userName":user, 
     "phantomjs.page.settings.password":password 
    }).build(); 

그때 셀레늄 서버 로그에서이 출력을 참조하십시오

PhantomJS is launching GhostDriver... 
[INFO - 2013-08-13T21:52:40.240Z] GhostDriver - Main - running on port 28904 
[INFO - 2013-08-13T21:52:40.394Z] Session [acd0ad70-0462-11e3-95df-4b230b17334d] - CONSTRUCTOR - Desired Capabilities:{"phantomjs.page.settings.password":"xxx","browserName":"phantomjs","phantomjs.page.settings.userName":"xxx"} 
[INFO - 2013-08-13T21:52:40.394Z] Session [acd0ad70-0462-11e3-95df-4b230b17334d] - CONSTRUCTOR - Negotiated Capabilities: {"browserName":"phantomjs","version":"1.9.1","driverName":"ghostdriver","driverVersion":"1.0.3","platform":"mac-10.6 (Snow Leopard)-32bit","javascriptEnabled":true,"takesScreenshot":true,"handlesAlerts":false,"databaseEnabled":false,"locationContextEnabled":false,"applicationCacheEnabled":false,"browserConnectionEnabled":false,"cssSelectorsEnabled":true,"webStorageEnabled":false,"rotatable":false,"acceptSslCerts":false,"nativeEvents":true,"proxy":{"proxyType":"direct"},"phantomjs.page.settings.password":"xxx","phantomjs.page.settings.userName":"xxx"} 

내가 협상 능력이 내가 지정한 사용자와 암호를 포함하는 것을 알 수 있습니다 .

14:43:25.504 INFO - Executing: [find element: By.id: auth-username-field-inputEl] at URL: /session/04627dc2-a16c-42b3-b3dc-48e502f7cfec/element) 
14:43:29.410 WARN - Exception thrown org.openqa.selenium.NoSuchElementException: Error Message => 'Unable to find element with id 'auth-username-field-inputEl'' 

를 내가 인증이없는 로컬 호스트 웹 사이트에 내 스크립트를 실행하면 잘 작동 : 내가 HTTP 기본 인증을 사용하는 웹 사이트의 페이지를 열려고 할 때 인증이 실패합니다. Firefox (Selenium을 통하지 않고)를 사용하여 원격 웹 사이트를 볼 경우 홈페이지를 인증하고 볼 수 있습니다.

"-w"를 사용하여 Webdriver 모드에서 PhantomJS를 실행 해봤는데 비슷한 결과가 나타납니다.

var page=require('webpage').create(); 
//page.customHeaders={'Authorization': 'Basic '+btoa('xxx:xxx')}; 
page.settings.userName="xxx"; 
page.settings.password="xxx"; 
var callback=function(status){ 
    if(timer)window.clearTimeout(timer); 
    if (status=='success' || status=='timedout') { 
     console.log(status); 
     console.log(page.plainText); 
    }else{ 
     console.log('Failed to load.'); 
    } 
    phantom.exit(); 
    }; 
var timer=window.setTimeout(callback,60000,'timedout'); 
var url="http://xxx.com"; 
page.open(url,callback); 

내가이 posting에서이 스크립트를 복사 : 나는 phantomjs이 스크립트를 실행하는 경우

그것은 작동합니다. 1.9.1에서 userName과 password가 잘 작동한다는 것을 알았습니다. customHeader를 설정할 필요가 없었습니다. 내 셀렌 스크립트에서 customHeader 시도했지만 차이를 만들지 않았다. 이것은 GhostDriver에서 문제가 될 수 있습니다.

누구든지이 기능을 사용할 수 있습니까?

+0

페이지가 제대로로드되지 않는 것 같습니다. 스크린 샷을 찍으려고 시도했거나 html 소스를 포착하여 어떤 페이지를 실행하려고했는지 확인해 봤니? –

+1

예, 스크린 샷이 비어 있고 소스가 빈 html 페이지입니다. – ybendana

답변

1

나는이 똑같은 상황에 있습니다.

내 이론은 401 (권한이 부여되지 않음)을 요청하고 사용자 이름/암호 조합을 사용하여 요청을 다시 보내야하는 NTLM (Windows 인증)을 사용하여 요청하는 것입니다. GhostDriver는 설정 가능성에 전달 된 자격 증명을 미연에 방지 것이다, only during the initial call를 적용하는 것이 매우 분명하다.

는 자바 스크립트 버전은 잘 작동하지만 C# 버전이 너무 화려하지 꽤 실망.

제안 사항이 있으면 언제든지 듣고 싶습니다.

관련 문제