2009-10-10 9 views
5

Sto usando mechanize (che usa clientform) per alcuni web crawling in python e poiché non supporta JS, voglio impostare un valore di un input inesistente in un modulo (l'input è generato da JS). Come posso fare questo?Come impostare un campo inesistente in Python ClientForm?

L'errore è simile a quello che si ottiene se si tenta di eseguire

from mechanize import Browser 
br = Browser() 
page = br.open('http://google.com') 
br.select_form(nr = 0) 
br['unexistent'] = 'hello' 

risposta

16

È necessario aggiungere prima il controllo al form, e quindi fixup la forma.

br.form.new_control('text','unexistent',{'value':''}) 
br.form.fixup() 
br['unexistent'] = 'hello' 

questo non è davvero molto ben documentato, e la fonte sotto fixup() c'è il commento:

This method should only be called once, after all controls have been 
added to the form. 

Tuttavia, non sembra che fa qualcosa di troppo pericoloso. Probabilmente almeno aggiungi il controllo prima di fare confusione con qualsiasi altra cosa nel modulo.

+0

Grazie, funziona come un fascino – Fluffy

Problemi correlati