2012-04-30 9 views
2

URLから自動的に1日に1回ダウンロードするPythonスクリプトがあります。DES/kerberosで保護されたURLを取得するためのPythonスクリプト

最近、URLを保護する認証が変更されました。 Internet Explorerで動作させるには、どこかのレジストリエントリにSupportedEncryptionTypes "0x7FFFFFFF"を追加して、KerberosのDESを有効にする必要がありました。それから私はサイトにブラウズするときIEの私のドメイン/ユーザ/パスワードを求めます。

される前に働いていた私のpythonコード:

def __build_ntlm_opener(self): 
    passman = HTTPPasswordMgrWithDefaultRealm() 
    passman.add_password(None, self.answers_url, self.ntlm_username, self.ntlm_password) 

    ntlm_handler = HTTPNtlmAuthHandler(passman) 

    opener = urllib.request.build_opener(ntlm_handler) 
    opener.addheaders= [ 
     #('User-agent', 'Mozilla/5.0 (Windows NT 6.0; rv:5.0) Gecko/20100101 Firefox/5.0') 
     ('User-agent', 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)') 
    ] 

    return opener 

今オープナー使用した場合のコードは、単純な401で失敗している:

urllib.error.HTTPError: HTTP Error 401: Unauthorized 

を私は、Kerberosまたはについて多くを知りませんDESであるが、私がこれまで見てきたことから、urllibがこれらを使ってサポートしているかどうかはわからない。

この機能を再利用するために使用できるサードパーティのライブラリやトリックはありますか?

答えて

1

セレンのウェブドライバを使用してブラウザを直接駆動することができます。私は時々、動的に生成されたサイトを削りたいときにこれを行います。ページを開いてパスワードを入力するコード例を次に示します。

from selenium import webdriver 

b = webdriver.Chrome() 
b.get('http://www.example.com') 
username_field = b.find_element_by_id('username') 
username_field.send_keys('my_username') 
password_field = b.find_element_by_id('password') 
password_field.send_keys('secret') 
login_button = b.find_element_by_link_text('login').click() 

これは、Webサイトの典型的なログイン画面を席巻するでしょう。次に

b.page_source 

このページのソースコードを提供します。主にJavascriptで生成されたとしても。

ソースコードは非常に単純です。http://code.google.com/p/selenium/source/browse/trunk/py/selenium/webdriver/remote/webelement.py

関連する問題