2017-10-31 3 views
2

Python (2.7) 및 Selenium (3.4.3)을 사용하여 geckodriver (0.19.0)를 통해 Firefox (52.2.0 ESR)를 구동하여 CentOS 7 기계.
사용자 자격 증명을 통과시켜이 자동화 작업을 완전히 자동화해야합니다. 저장 장치가 허용되지 않고 침입 할 수 없습니다.
드라마의 한 부분은 프로세스 자동화에 필요한 내부 웹 사이트가 Active Directory 도메인 내에 있고 자동화가 실행되는 컴퓨터가 아니라는 사실 때문입니다. 나는 사용자를 검증 할 필요가 없으며 인간 상호 작용을 필요로하지 않는 방법으로 웹 사이트에 자격 증명을 전달하거나 사람이 기계의 로컬 사용자가 될 수 있습니다.Python 및 Selenium에 대한 해결 방법 : Active Directory에 대한 인증

가 가
  • 은 [프로토콜] : // [사용자가 통과] @ [URL]
  • driver.switch_to_alert() + send_keys 것 같다

나는 다양한 순열을 시도했다 그 중 일부는 IE에서만 작동합니다. 액세스 할 권한이 없습니다.
이 문제를 처리하기 위해 라이브러리를 확인했습니다.

파이썬에 라이브러리를 추가 할 수 있으며 컴퓨터에 대한 sudo 액세스 권한이 있습니다. 인증에 액세스 할 수 없으므로 AD 통합이 불가능합니다.

이 AD 웹 사이트에 임의의 사용자의 자격 증명을 제공하여 자격 증명의 로컬 저장소에 사용자 상호 작용이 필요하지 않은 경우 어떻게 할 수 있습니까?

감사합니다

편집

나는 사용자가 다음의 일을하는 셀레늄에 대한 인증이 유지 인증 할 수있는 프록시 같은 ... 간단한 LDAP/AD 프록시가 있다고 생각 유효한?

편집 2

아마도이 진술의 아주 간단한 방법은 내가 사용자 자격 증명을 전달하고 일어나는 인증 팝업을 방지 할 것입니다.

+0

내가 틀렸다면 수정하십시오. 그러나 로컬 저장소에있는 웹 사이트에 사용자 자격 증명을 입력 할 수 있는지 묻는 질문이 있습니까? –

+1

도움을 주셔서 감사합니다! 아니요; 웹 사이트는 조직 내의 서버에서 호스팅됩니다. 다른 네트워크에 있지만 잘 연결되어 있습니다. –

+0

python-ldap이 꼭 필요한 것은 아니겠습니까? https://www.python-ldap.org/doc/html/index.html – BoboDarph

답변

2

솔루션 발견 :

브라우저 확장을 사용해야했습니다. 내 솔루션은 크롬을 위해 만들어졌지만 Firefox의 경우 거의 변하지 않습니다. edge 일 수 있습니다. Chrome & Firefox

  • runtime.nativeMessaging - - Chrome & Firefox
  • 모두 브라우저 API를하지만

    • webRequest.onAuthRequired :

      먼저까지, 당신은 당신의 브라우저에서 사용할 수 2 API를 필요 매우 유사하다. ifferences - Chrome 구현시 Promises이 부족한 경우.

      제대로 구성된 JSON 문자열을 보내기 위해 네이티브 메시징 호스트를 설정 한 경우 한 번 폴링하면됩니다. 즉, runtime.sendNativeMessage() 번으로 전화를 걸 수 있으며 자격 증명이 보장 될 수 있습니다. Pun 의도.

      다음, 우리는 webRequest.onAuthRequired 이벤트를 어떻게 처리해야하는지 살펴볼 필요가 있습니다.

      저는 Chromium에서 일하기 때문에 약속없는 Chrome API를 사용해야합니다.

      chrome.webRequest.onAuthRequired.addListener(
          callbackFunctionHere, 
          {urls:[targetUrls]}, 
          ['asyncBlocking'] // --> this line is important, too. Very. 
      

      변경] : 나는 큰 stealy - 도루를하고있어 this 소스의 예를 사용했기 때문에 내 기능 provideCredentials를 호출 할 수 있습니다

      . 비동기 버전을 찾으십시오. 우리는 원하지 않는다

      예제 코드는

      chrome.storage.local.get(null, gotCredentials); 
      

      ... storage.local에서 자격 증명을 가져옵니다. 아니.

      우리는 sendNativeMessage에 대한 단일 호출에서 자격 증명을 얻으므로 그 한 줄을 바꿀 것입니다.

      그게 전부입니다. 진지하게. 귀하의 호스트가 좋은 플레이를하는 한, 이것은 큰 비밀입니다. 나는 그것을 발견하는 데 얼마나 오랜 시간이 걸릴지 말하지 않을 것이다!

      링크 : 유용한 링크와

      내 질문 :

      • Here - Active Directory에
      • Here에 대해 인증을위한 해결 방법 - 또한 기능 NM 호스트
      • Here에 대한 몇 가지 작업 코드가 - 약속에 관한 깨달음을주는 어떤 자료

      그래서이 문제는 드문 것입니다.

      확장에 값을 전달

      는 첫 번째 단계입니다 ... 나는 솔루션을 구현하지 않은, 아직,하지만 난 거기에 도착하는 방법을 알고 -이 크롬과 파이어 폭스에서 모두 수행 할 수 있습니다. 버전에서 API가 필요한 nativeMessaging이 실제로 해당 버전에 있는지 확인하십시오. 이런 이유로 크롬으로 전환해야했습니다.

      또는 저장소 API를 사용하여 먼저 브라우저 저장소에 값을 입력 할 수 있습니다.

      다음은 webRequest API에서 onAuthRequired 이벤트를 사용하는 것입니다. 이벤트에 리스너를 설치하고 필요한 값을 전달하십시오.


      주의 사항 : 내가 바로 nativeMessaging의 API 솔루션의 확장 자체까지 모든 것을 구축하고 데이터를 인식하도록 스크립트를 얻기에 문제가 여전히있다. 이것은 거의 확실하게 내 JavaScript 기술은 이러한 API를 이해하기 위해 필요한 비밀의 지식과 충돌합니다. 덜 안전하다고 생각했지만 아직 저장 방법을 시도하지 않았습니다.

    관련 문제