TypeError: ListControl, должен установить последовательность (ошибка Python) - PullRequest
5 голосов
/ 02 декабря 2009

Я использую 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 голосов
/ 02 декабря 2009

Радиокнопки и флажки могут иметь другое поведение, чем другие элементы. Это зависит от их имени и идентификатора.

Если предметы имеют одинаковое имя, попробуйте сделать это:

br.find_control(name="E").value = ["0"]

Другой вариант:

form.find_control(name="E", kind="list").value = ["0"]

и, наконец, это может сработать:

    br["E"] = ["0"]

(я давно не пользовался механизацией, поэтому точно не помню).

...