1
import urllib2, re, urllib

def login():
    host = "http://localhost/cms/"
    user = 'admin'
    passw = 'admin'
    error = "Login to CMS Made Simple"
    form = [
        ('username', user),
        ('password', word)]   
    target = host + "/admin/login.php"
    login_form_data = urllib.urlencode(form)
    opener = urllib2.build_opener(target)
    opener.addheaders = [('User-agent', 'Mozilla/5.0')]
    source = opener.open(target, login_form_data).read()
    if re.search(error, source) == None : 
        print 'FOund =>>>' + target + 'Username : ' + user + 'Password :  ' + word
    else: 
        print 'Not Found=>> ' + target + '  Username : ' + user + 'Password :  ' + word

login()

私はこれを得ています:

    opener = urllib2.build_opener(host)
  File "D:\Python27\lib\urllib2.py", line 486, in build_opener
    opener.add_handler(h)
  File "D:\Python27\lib\urllib2.py", line 322, in add_handler
    type(handler))
TypeError: expected BaseHandler instance, got <type 'str'>

問題はここにあると思います:opener = urllib2.build_opener(target)

しかし、それを解決する方法は?私はたくさん試しました。

4

2 に答える 2

0

ドキュメントについてurllib2.build_opener:

ハンドラーは、BaseHandler のインスタンスまたは BaseHandler のサブクラスのいずれかになります (この場合、パラメーターなしでコンストラクターを呼び出すことが可能でなければなりません)。

str代わりに合格しようとします:

target=host+"/admin/login.php"
... 
opener = urllib2.build_opener(target)

URL を取得するための簡素化された API を使用してリクエストライブラリを試してください。

于 2012-10-29T11:44:00.957 に答える
0

行を削除するだけで機能します。build_opener は、何か特定のことをしたい場合を除き、引数を必要としません。この場合、サーバーが Cookie を使用してログイン状態を維持することを期待している場合は、CookieProcessor を追加することをお勧めします。

cjar = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cjar)
于 2012-10-29T11:48:59.290 に答える