Найти - Пользователи
Полная версия: как скриптом нажать конопку submit
Начало » Python для новичков » как скриптом нажать конопку submit
1
MyNameIsSergio
Доброго времени суток!
Есть задача подключиться к серверу, ввести данные формы, нажить кнопку 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>

Я использую Python Mechanize.
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
я не программист, помогите понять что происходит.

MyNameIsSergio
добавил
browser.select_form("F")
результат тот же.
В вызове browser.submit() нужно указывать параметры авторизации ?
lorien
Попробуйте ещё раз это указать перед вызовом submit():

browser.add_password(site_url,site_user,site_pass,realm=None)
MyNameIsSergio
спасибо, пробовал, не помогает.
Lexander
Эта форма, судя по всему, находится в разделе только для авторизованных пользователей.
Проверка авторизации может быть как простейшая (HTTP-аутентификация), так и через куки уже залогиненного пользователя.
Какой случай у вас?

Во втором случае нужно сохранять cookie и передавать его в спец. поле перед submit.
Хотя я не вижу поля для этого в исходной форме.
Возможно, используется хранение кук только на клиенте и работа по отправке кук отдана браузеру.
Тогда нужно правильный заголовок посылать с куками.
MyNameIsSergio
Спасибо за ответ.
Это форма, действительно находиться в разделе для авторизованных пользователей.
Сайтом используется простая HTTP-аутентификация (в браузере куки с этого сайта не хранятся), в логах подключения куки не передаются.
Подскажите где подробно прочитать про параметры submit(), пока немогу найти нужные мне примеры.
lorien
Как работает submit можно почитать в исходном коде библиотеки mechanize
Lexander
Попробуйте что-то типа
browser.addheaders.append(('Authorization', ‘Basic %s’ % base64.encodestring('%s:%s' % (site_user, site_pass))))
MyNameIsSergio
Спасибо огромное!
Все работает
добавил
import base64
browser.addheaders.append(('Authorization', 'Basic %s' % base64.encodestring('%s:%s' % (site_user, site_pass))))
В чем разница авторизаций? Мой вариант работал только для первой страницы, а Ваш и наследущей.
Как тут тему закрыть ? где писать SOLVED?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB