TypeError: ListControl, debe establecer una secuencia (error pitón)
Pregunta
Estoy usando Python Mechanize para abrir una página web, rellenar un formulario, y presentar esa forma. En realidad es bastante simple. Funciona hasta que me encuentro con botones de radio y "seleccionar" cuadros de entrada.
br.open(url)
br.select_form(name="postmsg")
br.form['subject'] = "Is this good for the holidays? "
br.form['message'] = "I'm new to technology."
br.form['E'] = '0'
br.submit()
br.form['E'] = '0'
File "build/bdist.linux-x86_64/egg/ClientForm.py", line 2897, in __setitem__
File "build/bdist.linux-x86_64/egg/ClientForm.py", line 2092, in __setattr__
File "build/bdist.linux-x86_64/egg/ClientForm.py", line 2100, in _set_value
TypeError: ListControl, must set a sequence
¿Por qué recibo este error? ¿Por qué no puedo configurar E al igual que los cuadros de texto? (E es un botón de opción)
Editar:. Esta es la forma, de acuerdo con Desarrollador Web
Elements
Index Id Name Type Value Label Size Maximum Length State
0 subject subject text 35
2 message message textarea
3 identity identity select 1
13 action_btn hidden
14 _charset_ hidden
16 r hidden /Stocks_(A_to_Z)/Stocks_G
9 E radio 0
Checked
8 E radio 1
15 .crumb hidden 1n1Yo3MQae3
7 E radio 2
17 bn hidden 25263
6 E radio 3
5 E radio 4
4 E radio 5
12 SubmitCancel SubmitCancel submit Cancel
1 mbpostthreads threads button Check Existing Topics First
11 SubmitPost SubmitPost submit Post Message
10 SubmitPreview SubmitPreview submit Preview Message
18 yIdCoreIdUser hidden annamae41g
Solución
Los botones de radio y casillas pueden tener un comportamiento diferente a otros elementos. Depende de su nombre y el id.
Si los artículos tienen el mismo nombre, trata de hacer esto:
br.find_control(name="E").value = ["0"]
Otra opción es:
form.find_control(name="E", kind="list").value = ["0"]
y, finalmente, esto podría funcionar:
br["E"] = ["0"]
(No he utilizado mecanizar desde hace tiempo, así que no recuerdo exactamente).