2011-12-19 71 views
14

Come parte della mia ricerca per migliorare in Python, ora sto tentando di accedere a un sito Web che frequento, inviare un messaggio privato e quindi firmare su. Finora, sono riuscito ad accedere (usando urllib, cookiejar e urllib2). Tuttavia, non riesco a capire come compilare il modulo richiesto per mandarmi un messaggio.Utilizzo di Python per accedere al sito Web, compilare un modulo, quindi disconnettersi

Il modulo si trova in /messages.php?action=send. Ci sono tre cose che devono essere riempite per il messaggio da inviare: tre campi di testo denominati nome, titolo e messaggio. Inoltre, c'è un pulsante di invio (denominato "submit").

Come posso compilare questo modulo e inviarlo?

+0

possibile duplicato di [i valori della forma compilare una pagina web tramite uno script Python (non prova)] (http://stackoverflow.com/questions/1555234/fill-form-values-in-a-web -page-via-a-python-script-not-testing) – ravi404

risposta

11
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() 

basta sostituire http://www.abc.com/messages.php?action=send con l'URL in cui il modulo è presentata

risposta al tuo commento: se l'url è l'URL in cui si trova il modulo, ed è necessario fare questo solo per un sito web , guardare il codice sorgente della pagina e trovare

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

e mettere questo indirizzo come parametro per la urllib2.urlopen

An d devi capire cosa fa il pulsante submit. Invia semplicemente una richiesta Http all'URL definito da action nel modulo. Quindi quello che fai è simulare questa richiesta con urllib2

+0

Whoop, mi dispiace. È la pagina in cui si trova il modulo. (continua nel prossimo commento grazie al mio stupido iPod) – Matthew

+0

(continua) Grazie! Sembra che funzionerà. Ci proverò al mattino - invierà anche il modulo o devo inserire qualcosa nella lista dei dati per "invio"? – Matthew

+0

Ho risposto modificando la risposta –

7

Vuoi la libreria mechanize. Ciò consente di automatizzare facilmente il processo di navigazione dei siti Web e l'invio di moduli/collegamenti successivi. Il sito a cui mi sono collegato ha esempi e documentazione abbastanza buoni.

+0

: D Ho installato ora, avrò un gioco con esso! Grazie: D – Matthew

1

Prova a elaborare le richieste che vengono fatte (ad esempio utilizzando lo strumento di sviluppo web Chrome o Firefox/Firebug) e imita la richiesta POST contenente i dati del modulo desiderati.

In aggiunta alla grande libreria di meccanizzazione menzionata da Andrew, nel caso in cui suggerirei anche di utilizzare BeautifulSoup per analizzare l'HTML.

Se non si desidera utilizzare mechanize ma si desidera comunque una soluzione semplice e pulita per creare richieste HTTP, si consiglia il modulo excellend requests.

3

È possibile utilizzare mechanize per lavorare facilmente con questo. Questo faciliterà il tuo lavoro di invio del modulo. Non dimenticare di controllare i parametri come nome, titolo, messaggio visualizzando il codice sorgente del modulo 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()