Используя 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.