Как сделать так, чтобы механизация не провалилась с формами на этой странице? - PullRequest
4 голосов
/ 28 мая 2009
import mechanize

url = 'http://steamcommunity.com'

br=mechanize.Browser(factory=mechanize.RobustFactory())

br.open(url)
print br.request
print br.form
for each in br.forms():
    print each
    print

Приведенный выше код приводит к:

Traceback (most recent call last):
  File "./mech_test.py", line 12, in <module>
    for each in br.forms():
  File "build/bdist.linux-i686/egg/mechanize/_mechanize.py", line 426, in forms
  File "build/bdist.linux-i686/egg/mechanize/_html.py", line 559, in forms
  File "build/bdist.linux-i686/egg/mechanize/_html.py", line 228, in forms
mechanize._html.ParseError

Моя конкретная цель - использовать форму входа в систему, но я даже не могу заставить ее признать, что есть какие-либо формы. Даже использование того, что я считаю наиболее простым методом выбора любой формы, br.select_form(nr=0), приводит к тому же результату трассировки. Тип формы - multipart / form-data, если это имеет значение.

Я полагаю, что все сводится к вопросу, состоящему из двух частей: как мне настроить механизм для работы с этой страницей или, если это невозможно, как еще можно сохранить файлы cookie?

edit: как упомянуто ниже, это перенаправляет на 'https://steamcommunity.com'.

Mechanize может успешно извлекать HTML, как видно из следующего кода:

url = 'https://steamcommunity.com'

hh = mechanize.HTTPSHandler()  # you might want HTTPSHandler, too
hh.set_http_debuglevel(1)
opener = mechanize.build_opener(hh)
response = opener.open(url)
contents = response.readlines()

print contents

Ответы [ 2 ]

2 голосов
/ 07 мая 2011

Используйте этот секрет, я уверен, что это работа для вас;)

br = mechanize.Browser(factory=mechanize.DefaultFactory(i_want_broken_xhtml_support=True))
2 голосов
/ 28 мая 2009

Вы упомянули, что веб-сайт перенаправляет на сервер https (ssl)?

Что ж, попробуйте установить новый обработчик HTTPS следующим образом:

mechanize.HTTPSHandler()
...