Понадобилось мне автоматом заполнять форму на одном малоизвестном сайте. Решил использовать Grab, т.к. мелькал перед глазами периодически. Тут и хранение сессий, и парсинг, и заполнение форм.
Возникла проблема. Проблема называется Disabled RadioВutton. В форме есть отключенный радио-селектор. При вызове grab_obj.submit() появляется ошибка:
Traceback (most recent call last):
File "<pyshell#20>", line 1, in <module>
g.grab.submit()
File "C:\Python27\lib\site-packages\grab-0.4.7-py2.7.egg\grab\ext\form.py", line 232, in submit
post = self.form_fields()
File "C:\Python27\lib\site-packages\grab-0.4.7-py2.7.egg\grab\ext\form.py", line 323, in form_fields
del fields[elem.name]
KeyError: 'shopProlongFullSet'
Суть в том что Grab при обработке формы удаляет отключенные элементы. При этом в словаре содержится один элемент radio (выбранный), а на форме их как минимум два; и Grab дважды удаляет элемент из словаря. Понятно что второй раз там элемента уже нет.
На данный момент я решил проблему изменением кода в grab/ext/form.py. В частности добавил перед 232 строкой проверку на наличие элемента в словаре:
if elem.get('disabled'): if fields.get(elem.name): del fields[elem.name] continue
Вопрос следующий. Есть ли другие, легальные, способы обойти эту ошибку?
Использую Grab 0.4.7