2011-09-24 15 views
6

Sono VERAMENTE confuso. Sto praticamente cercando di compilare un modulo su un sito web con mechanize per Python. Ho tutto da lavorare tranne il menu a discesa. Che cosa utilizzo per selezionarlo e cosa devo inserire per il valore? Non so se dovrei mettere il nome della selezione o il valore numerico di esso. L'aiuto sarebbe molto apprezzato, grazie.Come selezionare un elemento per il menu a tendina con mechanize in python?

Codice frammento:

try: 
     br.open("http://www.website.com/") 
     try: 
      br.select_form(nr=0) 
      br['number'] = "mynumber" 
      br['from'] = "[email protected]" 
      br['subject'] = "Yellow" 
      br['carrier'] = "203" 
      br['message'] = "Hello, World!" 
      response = br.submit() 
     except: 
      pass 
    except: 
     print "Couldn't connect!" 
     quit 

Ho problemi con il vettore, che è un menu a discesa.

+0

Si prega di dare un esempio concreto. Mostra il codice che hai provato e cosa è successo quando lo hai provato? – infrared

+0

Ok, pubblicandolo ora – user962889

+0

Probabilmente otterrai una risposta migliore se riscrivi il titolo della tua domanda in modo che sia un riepilogo del tuo problema invece di quello che sembra essere un elenco di tag (l'elenco dei tag è qui solo per quello). E non c'è bisogno di dire "Please Help!", Poiché se stai facendo una domanda, stai ovviamente chiedendo aiuto. –

risposta

3

In base allo mechanize documentation examples, è necessario accedere agli attributi dell'oggetto form, non all'oggetto browser. Inoltre, per il controllo di selezione, è necessario impostare il valore a un elenco:

br.open("http://www.website.com/") 
br.select_form(nr=0) 
form = br.form 
form['number'] = "mynumber" 
form['from'] = "[email protected]" 
form['subject'] = "Yellow" 
form['carrier'] = ["203"] 
form['message'] = "Hello, World!" 
response = br.submit() 
+0

Non sono sicuro che se hai intenzione di rispondere, perché l'ho chiesto ieri, ma per "gestore", dovrei impostare il valore sul nome di ciò che è presente nell'elenco a discesa o sul valore? es: Nome: Foo Valore: 129 – user962889

+0

Potresti pubblicare l'html del modulo in questione, quindi posso testarlo correttamente e rispondere? – infrared

2

dispiace per rilanciare un post morto da tempo, ma questa è stata la risposta ancora migliore che ho trovato su google e non lavoro. Dopo più tempo di quanto mi importi ammettere, l'ho capito. infrarossi ha ragione sull'oggetto modulo, ma non sul resto, e il suo codice non funziona. Ecco alcuni codice che funziona per me (anche se sono sicuro che esista una soluzione più elegante):

# Select the form 
br.open("http://www.website.com/") 
br.select_form(nr=0) # you might need to change the 0 depending on the website 

# find the carrier drop down menu 
control = br.form.find_control("carrier")  

# loop through items to find the match 
for item in control.items: 
    if item.name == "203": 

    # it matches, so select it 
    item.selected = True 

    # now fill out the rest of the form and submit 
    br.form['number'] = "mynumber" 
    br.form['from'] = "[email protected]" 
    br.form['subject'] = "Yellow" 
    br.form['message'] = "Hello, World!" 
    response = br.submit() 

    # exit the loop 
    break 
+0

Potrebbe essere possibile eseguire control.disabled = False control.value = ["203"] anziché eseguire il ciclo. Fammi sapere – Lazik

Problemi correlati