Форум сайта python.su
0
Доброго времени суток!
Есть задача подключиться к серверу, ввести данные формы, нажить кнопку submit, получить вывод
Исходная страница сервера :
<form method="POST" action="blank.phtml" name="F"> <input class=send type="submit" value="Запрос" > <input class=send type="reset" value="Очистить" >
<td><input type="checkbox" name="1" > 1</td> <td><input type="checkbox" name="2" > 2</td> <td><input type="checkbox" name="3" > 3</td> <td><input type="checkbox" name="4" > 4</td>
import mechanize site_url = 'http://examle.com' site_user= 'user' site_pass = 'password' browser = mechanize.Browser() browser.add_password(site_url,site_user,site_pass,realm=None) browser.open(site_url) page1=browser.response().read() for form in browser.forms(): print form
<F POST http://example.com application/x-www-form-urlencoded <SubmitControl(<None>=Запрос) (readonly)> <IgnoreControl(<None>=<None>)> <CheckboxControl(1=[on])> <CheckboxControl(2=[on])> <CheckboxControl(3=[on])> <CheckboxControl(4=[on])>>
response = browser.submit()
File "./test1.py", line 33, in <module> response = browser.submit() File "/usr/lib/python2.7/site-packages/mechanize-0.2.5-py2.7.egg/mechanize/_mechanize.py", line 541, in submit return self.open(self.click(*args, **kwds)) File "/usr/lib/python2.7/site-packages/mechanize-0.2.5-py2.7.egg/mechanize/_mechanize.py", line 203, in open return self._mech_open(url, data, timeout=timeout) File "/usr/lib/python2.7/site-packages/mechanize-0.2.5-py2.7.egg/mechanize/_mechanize.py", line 255, in _mech_open raise response mechanize._response.httperror_seek_wrapper: HTTP Error 401: Authorization Required
Офлайн
75
Офлайн
0
добавил
browser.select_form("F")
Офлайн
Попробуйте ещё раз это указать перед вызовом submit():
browser.add_password(site_url,site_user,site_pass,realm=None)
Офлайн
0
спасибо, пробовал, не помогает.
Офлайн
33
Эта форма, судя по всему, находится в разделе только для авторизованных пользователей.
Проверка авторизации может быть как простейшая (HTTP-аутентификация), так и через куки уже залогиненного пользователя.
Какой случай у вас?
Во втором случае нужно сохранять cookie и передавать его в спец. поле перед submit.
Хотя я не вижу поля для этого в исходной форме.
Возможно, используется хранение кук только на клиенте и работа по отправке кук отдана браузеру.
Тогда нужно правильный заголовок посылать с куками.
Офлайн
0
Спасибо за ответ.
Это форма, действительно находиться в разделе для авторизованных пользователей.
Сайтом используется простая HTTP-аутентификация (в браузере куки с этого сайта не хранятся), в логах подключения куки не передаются.
Подскажите где подробно прочитать про параметры submit(), пока немогу найти нужные мне примеры.
Офлайн
Как работает submit можно почитать в исходном коде библиотеки mechanize
Офлайн
33
Попробуйте что-то типа
browser.addheaders.append(('Authorization', ‘Basic %s’ % base64.encodestring('%s:%s' % (site_user, site_pass))))
Офлайн
0
Спасибо огромное!
Все работает
добавил
import base64 browser.addheaders.append(('Authorization', 'Basic %s' % base64.encodestring('%s:%s' % (site_user, site_pass))))
Офлайн