Python Mechanize - отправить пользовательскую форму - PullRequest
2 голосов
/ 08 февраля 2011

Я взаимодействую со страницей, для которой требуется вход с помощью mechanize. Он использует некоторый javascript на главной странице, что затрудняет использование механизации. Я знаю, какую форму я должен отправить для входа в систему - тот, который всегда генерируется js, один и тот же каждый раз. Как я могу заставить механизировать просто отправить пользовательскую форму, которой нет на странице? В основном эквивалентно этой проблеме perl , но в Python.

Ответы [ 2 ]

5 голосов
/ 04 мая 2012

(ПРИМЕЧАНИЕ. Это недавно появилось снова, и я действительно заставил его работать сейчас.)

Это похоже на работу:

br.open(URL)
res = mechanize._form.ParseString(FORM_HTML, BASE_URL)
br.form = res[1]
#continue as if the form was on the page and selected with .select_form()
br['username'] = 'foo'
br['password'] = 'bar'
br.submit()

URL - полный URL-адреспосетил сайт.BASE_URL - это каталог, в котором находится URL. FORM_HTML - это любой HTML, содержащий элемент form, например:

<form method='post' action='/login.aspx'>
    <input type='text' name='username'>
    <input type='text' name='password'>
    <input type='hidden' name='important_js_thing' value='processed_with_python TM'>
</form>

. По какой-то причине mechanize._form.ParseString возвращает две формы.Первый - это GET запрос к базовому URL без ввода;вторая, правильно проанализированная форма от FORM_HTML.

0 голосов
/ 08 февраля 2011

Парсит страницу, извлекает нужные элементы, реформирует страницу и внедряет их обратно в механизацию.

Для проекта, над которым я работал, мне пришлось использовать имитированный браузер, и оказалось, что Mechanize очень плохо справляется с обработкой форм. Это выдернет неинтерпретированные элементы из блоков Javascript и умрет. Мне пришлось написать обходной путь, который использовал BeautifulSoup, чтобы убрать все биты, которые заставили бы его умереть, прежде чем он достиг парсера форм.

Вы можете столкнуться или не столкнуться с этой проблемой, но об этом нужно помнить. В конечном итоге я отказался от подхода Mechanize и пошел с Selenium. Его обработчик форм был намного лучше и мог обрабатывать JS. У него есть свои проблемы (браузер добавляет уровень сложности), но мне было гораздо проще работать с ним.

...