类型错误:ListControl,必须设置一个序列(Python错误)
我正在使用Python的Mechanize库来打开一个网站,填写一个表单,然后提交这个表单。其实这个过程挺简单的。直到我遇到单选按钮和“选择”输入框的时候,它就不太好使了。
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
我为什么会遇到这个错误?为什么我不能像设置文本框那样设置E呢?(E是一个单选按钮)
补充:这是根据网页开发者工具显示的表单。
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
1 个回答
8
单选按钮和复选框的行为可能和其他元素不一样,这主要取决于它们的名称和ID。
如果这些选项的名称相同,可以试试这个方法:
br.find_control(name="E").value = ["0"]
还有一个选择是:
form.find_control(name="E", kind="list").value = ["0"]
最后,这个方法也许有效:
br["E"] = ["0"]
(我有一段时间没用mechanize了,所以不太记得具体情况)。