Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: [Python] mechanize заполнение веб формы  (Прочитано 2889 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн wiom

  • Автор темы
  • Любитель
  • *
  • Сообщений: 82
    • Просмотр профиля
    • wiom.ru
Не получается заполнить форму на сайте. Нашел пример
import cookielib
from mechanize import ParseResponse, urlopen, Browser
response = urlopen("https://account.cyberghostvpn.com/en/login")
forms = ParseResponse(response, backwards_compat=False)
form = forms[0]
print (form)
с одним сайтом это получилось. я увидел поля формы и потом смог заполнить ее и отправить. но вот с другим сайтом (он указан в параметре urlopen) такой трюк не проходит вылетает ошибка 403. Как я понял, нужно просто указать headers в запросе, а как это сделать я не смог найти. во всяком случае для urlopen. Подскажите пожалуйста что мне делать?))
программисты - это люди, которые решают никому неизвестные проблемы, никому непонятными способами.

symon2014

  • Гость
Re: [Python] mechanize заполнение веб формы
« Ответ #1 : 11 Июля 2015, 07:17:32 »
Конкретно не подскажу, но обычно ошибка 403 - это отказ в доступе(недостаточно прав).

Оффлайн wiom

  • Автор темы
  • Любитель
  • *
  • Сообщений: 82
    • Просмотр профиля
    • wiom.ru
Re: [Python] mechanize заполнение веб формы
« Ответ #2 : 11 Июля 2015, 07:31:02 »
symon2014, вы правы, 403 Forbidden означает что доступ к документу запрещен. И я уже даже выяснил причину. Вот так работает
import cookielib
from mechanize import Browser

br = Browser()
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
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')]
res  = br.open('https://account.cyberghostvpn.com/en/login')
print res.read()
а работает потому что указаны headers. но мне нужно сделать это с urlopen. чтобы оттуда я спарсил форму авторизации. хотя, быть может кто то знает как еще можно получить список форм и полей, то я буду очень признателен)

Пользователь решил продолжить мысль [time]11 Июль 2015, 09:18:35[/time]:

в общем вот что получилось

попытка с mechanize
import cookielib
from mechanize import Browser

br = Browser()
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
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('https://account.cyberghostvpn.com//en_us/login')
for f in br.forms():
    print f.name
в ответ ничего.

попытка с grab
from grab import Grab

g = Grab(log_file='out.html')
g.go('https://account.cyberghostvpn.com//en_us/login')
g.set_input_by_xpath(".//*[@id='loginForm']/input[1]","логин")
g.set_input_by_xpath(".//*[@id='loginForm']/input[1]","пароль")
g.submit()

в ответ
(Нажмите, чтобы показать/скрыть)

подскажите как мне поля заполнить на этом сайте?
« Последнее редактирование: 11 Июля 2015, 08:19:12 от wiom »
программисты - это люди, которые решают никому неизвестные проблемы, никому непонятными способами.

 

Страница сгенерирована за 0.017 секунд. Запросов: 21.