2011-09-24 14 views
6

Estoy REALMENTE confundido. Básicamente estoy tratando de completar un formulario en un sitio web con mechanize para Python. Tengo todo para trabajar, excepto el menú desplegable. ¿Qué uso para seleccionarlo y qué monto para el valor? No sé si se supone que debo poner el nombre de la selección o el valor numérico de la misma. La ayuda sería muy apreciada, gracias.¿Cómo seleccionar un ítem para el menú desplegable con mechanize en python?

Fragmento de código:

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 

Tengo problemas con el transportista, que es un menú desplegable.

+0

Por favor, brinde un ejemplo concreto. ¿Muestra el código que probó y qué sucedió cuando lo intentó? – infrared

+0

Ok, publíquelo ahora – user962889

+0

Probablemente obtendrá una mejor respuesta si reescribe el título de su pregunta para que sea un resumen de su problema en lugar de lo que parece ser una lista de etiquetas (la lista de etiquetas está aquí solo para eso). Y no es necesario decir "¡Ayúdenme!", Ya que si hace una pregunta, obviamente está pidiendo ayuda. –

Respuesta

3

Según el mechanize documentation examples, debe acceder a los atributos del objeto form, no al objeto browser. Asimismo, para el control de selección, es necesario establecer el valor de una lista:

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

No estoy seguro de si vas a contestar, porque pregunté esto ayer, pero para "transportista", ¿establecería el valor al nombre de lo que está en la lista desplegable o el valor? Ej: Nombre: Valor Foo: 129 – user962889

+0

¿Podría publicar el html del formulario en cuestión, para que pueda probarlo correctamente y responder? – infrared

2

Lo siento por la reactivación de un post-muerto hace mucho tiempo, pero esta fue la todavía mejor respuesta que pude encontrar en google y no lo hace trabajo. Después de más tiempo del que me importa admitir, lo descubrí. infrarrojo tiene razón sobre el objeto de formulario, pero no sobre el resto, y su código no funciona. Aquí hay un código que funciona para mí (aunque estoy seguro de que existe una solución más 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

Es posible que pueda hacer control.disabled = False control.value = ["203"] en lugar de un bucle. Házmelo saber – Lazik

Cuestiones relacionadas