2017-10-31 12 views
2

Python(2.7)とSelenium(3.4.3)を使用してFirefox(52.2.0 ESR)をgeckodriver(0.19.0)で起動し、CentOSのプロセスを自動化しています7マシン。
この資格情報を渡してこの自動化を完全に無人で操作する必要があります。
私のオートメーションを実行しているマシンがActive Directoryドメイン内にあるため、プロセスに必要な社内Webサイトが存在しないためにドラマが1つ発生しています。私はユーザーを検証する必要はなく、人間のやりとりを必要としないような方法で、またはマシン上のローカルユーザーになるように、資格情報をWebサイトに渡すだけです。PythonとSeleniumの回避策:Active Directoryに対する認証

私は様々なの順列試してみました:それはそう// [URL]

  • driver.switch_to_alert(@ [ユーザー、パス])+ send_keys
    • を[プロトコル]をそれらのうちのいくつかはIE上でしか動作しませんが、私はアクセス権がありません。
      私はこれを処理するためのライブラリをチェックしており、役に立たないものはありません。

      私はPythonにライブラリを追加できます。私はマシンにsudoアクセスできます。認証には触れないので、ADの統合はできません。

      このAD Webサイトに任意のユーザーの資格情報を与えて、資格情報のローカル記憶域にユーザーの操作が不要になるようにするにはどうすればよいですか?

      は、私はそのことを行うためにセレンのためにその認証を保持し、ユーザーを認証することができ、プロキシのようなもの... は、単純なLDAP/ADプロキシがあると思い、あなたに

      EDIT

      ありがとうございました利用可能ですか?

      EDIT 2

      は、おそらくこれを述べるのは非常に簡単な方法は、私は、ユーザーの資格情報を渡すと、起きてから認証ポップアップを防ぎたいということです。

    +0

    私が間違っていると私を修正しますが、ローカルストレージにあるWebサイトにユーザーの資格情報を入力できるかどうか質問していますか? –

    +1

    助けてくれてありがとう! いいえ。ウェブサイトは組織内のサーバー上でホストされます。彼らはうまく接続されていますが、別のネットワーク上にあります。 –

    +0

    python-ldapは必要なものを正確に行うべきではありませんか? https://www.python-ldap.org/doc/html/index.html – BoboDarph

    答えて

    2

    解決済み:

    ブラウザの拡張機能を使用する必要がありました。 私のソリューションはクロム用に作られていますが、Firefoxの場合はほとんど変わらず、の場合はのエッジが必要です。

    まずまで、あなたのブラウザのために利用できるようにするために2つのAPIを必要とする:

    両方のブラウザのAPIであるが非常によく似ている、彼らはいくつかの重要なdを持っているifferences - Chromeの実装にはPromisesがありません。

    正しく作成されたJSON文字列を送信するようにネイティブメッセージングホストを設定した場合は、一度だけポーリングする必要があります。つまり、runtime.sendNativeMessage()への1回の通話を使用することができ、信任状が確実であることが保証されます。 Punは意図した。

    次のについては、webRequest.onAuthRequiredイベントの処理方法を確認する必要があります。

    私はChromiumで作業しているので、私は約束のないChrome APIを使用する必要があります。

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

    変更:

    私は大きなstealy-泥棒だとthisソースからの例を使用するので、私は私の機能provideCredentialsを呼び出すことになります。非同期バージョンを探します。

    のコード例では、我々はそれをしたくないstorage.local ...

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

    から資格情報を取得します。いいえ。

    私たちはsendNativeMessageへの1回の呼び出しから資格情報を取得したいので、その1行を変更します。

    chrome.runtime.sendNativeMessage(hostName, { text: "Ready" }, gotCredentials); 
    

    これだけです。真剣に。あなたのホストがうまくいく限り、これは大きな秘密です。私はそれを見つけるのにどれくらいの時間がかかるか教えてくれません!

    リンク:役に立つリンクと

    私の質問:

    • Here - Active Directoryの
    • Hereに対して認証するための回避策は - また、機能NMホスト
    • Hereのためのいくつかの作業コードを持っています - 約束の啓発資料

    このことは、それほど問題ではないことが分かります。

    拡張子に値を渡す

    は最初のステップです...私は解決策を実装していない、まだ、私はそこに取得する方法を知っている - これはChromeとFirefoxの両方で行うことができます。バージョンを見て、必要なAPI nativeMessagingが実際にあなたのバージョンに存在することを確認してください。私はこの理由からクロムに切り替えなければならなかった。

    また、ストレージAPIを使用して、ブラウザのストレージに値を格納することもできます。

    次に、webRequest APIのonAuthRequiredイベントを使用します。イベントのリスナーをセットアップし、必要な値を渡します。


    警告:私は右nativeMessagingのAPIソリューションの拡張そのものまで、すべてを構築しているとデータを認識するためのスクリプトを取得する際に問題があったが、まだあります。これは、ほぼ確実に私のJavaScriptのスキルが、これらのAPIを意味のあるものにするために必要な秘密の知識と突き当たります... 私はそれほど安全ではない(私の心では)記憶方法を試していませんが、

    関連する問題