2010-11-02 13 views
3

J'utilise mechanize pour remplir des formulaires et je rencontre un problème avec les listes déroulantes remplies dynamiquement qui dépendent d'une sélection précédente.Python Mécaniser avec sélection dynamique Dropdown

En mécaniser, je fais quelque chose comme ceci pour sélectionner la catégorie:

import mechanize 
br = mechanize.Browser() 
"""Select the form and set up the browser""" 
br["state"] = ["California"] 
br["city"] = ["San Francisco"] # this is where the error is 
br.submit() 

Je ne peux pas choisir la ville comme « San Francisco » jusqu'à ce que j'ai choisi l'État comme « la Californie, » parce que la ville liste déroulante est dynamiquement peuplé après avoir choisi "Californie".

Comment puis-je soumettre la ville avec Python et mécaniser?

Répondre

1

mechanize ne supporte pas le JavaScript. Au lieu de cela, vous devriez utiliser urllib2 pour envoyer les valeurs désirées.

import urllib2 
import urllib 

values = dict(state="CA", city="SF") # examine form for actual vars 
try: 
    req = urllib2.Request("http://example.com/post.php", 
          urllib.urlencode(values)) 
    response_page = urllib2.urlopen(req).read() 
except urllib2.HTTPError, details: 
    pass #do something with the error here... 
+0

Soumettre, n'est-ce pas? Je suppose que cela signifierait que je ne peux pas le faire mécaniser, puisque j'ai besoin de Javascript. Je ne vois pas non plus comment urllib2 supporte Javascript, car de votre exemple, il ne serait toujours pas capable de choisir la ville – Lionel

+0

@Lionel - Non, vous devez savoir à l'avance comment le JavaScript remplit la liste déroulante. Il ne devrait pas être trop difficile d'examiner le JavaScript et de créer les valeurs de message qu'il fait. –

+0

Bon point, je vais étudier le Javascript pour obtenir les valeurs de poste. – Lionel