Использование Python Mechanize для входа на сайты? - PullRequest
4 голосов
/ 26 октября 2011

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

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) (вот где я выбираю форму), но я не знал, что туда поместить (поэтому я подумал, что это будет вторая форма), потому что Twitter не называет их формы.

1 Ответ

4 голосов
/ 26 октября 2011

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

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

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

...