Используя Python для входа на сайт, заполните форму и выйдите из нее.

Как часть моего стремления стать лучше на Python, я сейчас пытаюсь войти на сайт, который я часто посещаю, отправляю личное сообщение, а затем выхожу. До сих пор мне удалось войти (используя urllib, cookiejar и urllib2). Однако я не могу понять, как заполнить необходимую форму, чтобы отправить мне сообщение.

Форма находится по адресу /messages.php?action=send. Там должно быть заполнено три вещи для отправки сообщения: три текстовых поля с именем, названием и сообщением. Кроме того, есть кнопка отправки (с именем "submit" ).

Как заполнить эту форму и отправить ее?

Ответы

Ответ 1

import urllib
import urllib2

name =  "name field"
data = {
        "name" : name 
       }

encoded_data = urllib.urlencode(data)
content = urllib2.urlopen("http://www.abc.com/messages.php?action=send",
        encoded_data)
print content.readlines()

просто замените http://www.abc.com/messages.php?action=send на URL, в котором отправляется ваша форма

ответьте на свой комментарий: если url - это URL-адрес, где находится ваша форма, и вам нужно сделать это только для одного веб-сайта, посмотрите исходный код страницы и найдите

<form method="POST" action="some_address.php">

и поместите этот адрес в качестве параметра для urllib2.urlopen

И вы должны понять, что делает кнопка submit. Он просто отправляет запрос Http на URL, определенный action в форме. Итак, что вы делаете, это имитировать этот запрос с помощью urllib2

Ответ 2

Вам нужна библиотека mechanize. Это позволяет легко автоматизировать процесс просмотра веб-сайтов и отправки форм/следующих ссылок. Сайт, с которым я связан, содержит неплохие примеры и документацию.

Ответ 3

Вы можете использовать mechanize для удобства работы с этим. Это облегчит вашу работу по отправке формы. Не забудьте проверить параметры, такие как имя, заголовок, сообщение, увидев исходный код html-формы.

import mechanize
br = mechanize.Browser()
br.open("http://mywebsite.com/messages.php?action=send")
br.select_form(nr=0)
br.form['name'] = 'Enter your Name'
br.form['title'] = 'Enter your Title'
br.form['message'] = 'Enter your message'
req = br.submit()

Ответ 4

Попробуйте выполнить сделанные запросы (например, с помощью инструмента веб-разработчика Chrome или с помощью Firefox/Firebug) и подражать запросу POST, содержащему требуемые данные формы.

В дополнение к большой библиотеке механики, упомянутой Андреем, в случае, если я также предлагаю вам использовать BeautifulSoup для анализа HTML.

Если вы не хотите использовать механизацию, но все же хотите получить легкое, чистое решение для создания HTTP-запросов, я рекомендую excellend requests.