2009-10-10 7 views
5

J'utilise mechanize (qui utilise clientform) pour certains web crawling en python et comme il ne supporte pas JS, je veux définir une valeur d'entrée inexistante dans un formulaire (l'entrée est générée par JS). Comment puis-je faire ceci?Comment définir un champ inexistant dans Python ClientForm?

L'erreur est similaire à celui que vous obtenez si vous essayez d'exécuter

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

Répondre

16

Vous devez d'abord ajouter le contrôle à la forme, puis fixup la forme.

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

C'est vraiment pas très bien documenté, et dans la source sous fixup() il y a le commentaire:

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

Cependant, il ne semble pas comme il le fait quoi que ce soit trop dangereux. Probablement au moins ajouter le contrôle d'abord avant de jouer avec n'importe quoi d'autre dans le formulaire.

+0

Merci, fonctionne comme un charme – Fluffy

Questions connexes