it-swarm-pt.tech

Usando Python para acessar o site, preencha um formulário e saia

Como parte de minha busca para melhorar em Python Agora, estou tentando entrar em um site que frequento, envio uma mensagem privada para mim mesmo e depois saio. Até agora, consegui para entrar (usando urllib, cookiejar e urllib2) .No entanto, não consigo descobrir como preencher o formulário necessário para me enviar uma mensagem.

O formulário está localizado em /messages.php?action=send. Há três coisas que precisam ser preenchidas para que a mensagem seja enviada: três campos de texto chamados nome, título e mensagem. Além disso, há um botão de envio (chamado "enviar").

Como posso preencher este formulário e enviá-lo?

20
Matthew
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()

apenas substitua http://www.abc.com/messages.php?action=send com o URL em que seu formulário está sendo enviado

responda ao seu comentário: se o URL for o URL em que seu formulário está localizado e você precisar fazer isso apenas para um site, consulte o código-fonte da página e encontre

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

e coloque esse endereço como parâmetro para urllib2.urlopen

E você precisa entender o que o botão submit faz. Apenas envia uma solicitação Http para o URL definido por action no formulário. Então, o que você faz é simular essa solicitação com urllib2

14
Jan Vorcak

Você deseja a biblioteca mecanizar . Isso permite que você automatize facilmente o processo de navegação em sites e envio de formulários/links a seguir. O site ao qual eu vinculei tem bons exemplos e documentação.

11
Andrew Wilkinson

Você pode usar o mecanizar para trabalhar facilmente com isso. Isso facilitará seu trabalho de enviar o formulário. Não se esqueça de verificar os parâmetros como nome, título e mensagem, vendo o código fonte do formulário 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()
8
Prashant Dey

Tente elaborar as solicitações feitas (por exemplo, usando a ferramenta de desenvolvedor da web Chrome Chrome ou Firefox/Firebug)) e imite a solicitação POST contendo o formulário desejado dados.

Além da excelente biblioteca de mecanização mencionada por Andrew, no caso de eu sugerir que você use BeautifulSoup para analisar o HTML.

Se você não quiser usar mecanizar, mas ainda assim desejar uma solução fácil e limpa para criar solicitações HTTP, recomendo o módulo excellend orders .

2
Danilo Bargen

Para postar dados na página da Web, use cURL algo como isto,

curl -d Name="Shrimant" -d title="Hello world" -d message="Hello, how are you" -d Form_Submit="Send" http://www.example.com/messages.php?action=send

A opção "-d" informa ao cURL que o próximo item são alguns dados a serem enviados ao servidor em http://www.example.com/messages.php?action=send

2
Smshrimant