Используете механизм Python для входа на веб-сайты?

Я использую chanize (и следую этому руководству), чтобы попытаться войти на веб-сайты. Я хотел попробовать протестировать его в Twitter, поэтому придумал такой сценарий:

import mechanize
import cookielib

username = 'user'   # your username/email
password = 'pass'   # your password

br = mechanize.Browser()

# set cookies
cookies = cookielib.LWPCookieJar()
br.set_cookiejar(cookies)

# browser settings (used to emulate a browser)
br.set_handle_equiv(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
br.set_debug_http(False)
br.set_debug_responses(False)
br.set_debug_redirects(False)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time = 1)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]

br.open('http://twitter.com/') # open twitter

br.select_form(nr=1) # select the form

br['session[username_or_email]'] = username
br['session[password]'] = password
br.submit() # submit the login data
print(br.response().read) # print the response

Вот вывод Python, когда я запускаю свой скрипт:

$ python twitterLoginTest.py 
<bound method response_seek_wrapper.read of <response_seek_wrapper at 0x8feaeac whose wrapped object = <closeable_response at 0x8feeaac whose fp = <socket._fileobject object at 0x8feb42c>>>>

(имя файла twitterLoginTest.py)

Теперь я не совсем уверен, что означает этот ответ, но он действительно не кажется правильным.

Итак, вот мои вопросы

1) Есть ли лучший способ входа на веб-сайты с помощью скриптов (не только твиттера, но и любого веб-сайта, и метод, который можно изменить для работы на любом веб-сайте с входом в систему)?

2) Где я ошибаюсь в своем сценарии?

3) Как решить проблему, войти?

У меня есть предположение, что проблема связана с br.select_form(nr=1) (вот где я выбираю форму), но я не знал, что туда вставить (поэтому я решил, что это будет вторая форма), потому что Твиттер не называет свои формы.


person Bhaxy    schedule 25.10.2011    source источник


Ответы (1)


Я считаю, что последняя строка должна быть:

print(br.response().read()) # print the response

Обратите внимание на () после read. В настоящее время вы просто печатаете сам метод read, а не результат вызова метода read.

person gklinich    schedule 26.10.2011