Ответ 1
Я попытался использовать параметр nr, без везения.
Мне удалось заставить его работать с комбинацией параметров имени и метки, где "метка", похоже, соответствует "значению" в HTML:
Вот мои две кнопки отправки:
<input type="submit" name="Preview" value="Preview" />
<input type="submit" name="Create" value="Create New Page" />
... и здесь код, который нажимает на первый, возвращается, а затем нажимает на второй:
from mechanize import Browser
self.br = Browser()
self.br.open('http://foo.com/path/to/page.html')
self.br.select_form(name='my_form')
self.br['somefieldname'] = 'Foo'
submit_response = self.br.submit(name='Preview', label='Preview')
self.br.back()
self.br.select_form(name='my_form')
self.br['somefieldname'] = 'Bar'
submit_response = self.br.submit(name='Create', label='Create New Page')
Там был вариант, который также работал у меня, где "имя" кнопки отправки такое же, как:
<input type="submit" name="action" value="Preview" />
<input type="submit" name="action" value="Save" />
<input type="submit" name="action" value="Cancel" />
и
self.br.select_form(name='my_form')
submit_response = self.br.submit(name='action', label='Preview')
self.br.back()
submit_response = self.br.submit(name='action', label='Save')
ВАЖНОЕ ЗАМЕЧАНИЕ. Я смог получить любой из этого кода с несколькими сообщениями, чтобы работать после, удаляя некоторый HTML на оставшейся странице.
В частности, у меня не могло быть <br/>
- вместо этого у меня было бы <br />
... и, что еще менее значило, у меня не могло быть ничего между двумя кнопками отправки.
Это разочаровало меня в том, что ошибка механизации /ClientForm, с которой я охотился более двух часов, сводилась к следующему:
<tr><td colspan="2"><br/><input type="submit" name="Preview" value="Preview" /> <input type="submit" name="Create" value="Create New Page" /></td></tr>
(все в одной строке) не работает, но
<tr><td colspan="2"><br />
<input type="submit" name="Preview" value="Preview" />
<input type="submit" name="Create" value="Create New Page" /></td></tr>
работал отлично (на нескольких строках, что также не должно было иметь значения).
Мне нравится механизация, потому что она проста в установке (просто скопируйте файлы в мой каталог include) и потому, что она довольно проста в использовании, но если я не пропущу что-то важное, я думаю, что такие ошибки выглядят ужасно - Я не могу придумать вескую причину, почему первый пример должен потерпеть неудачу, а второй должен работать.
И, кстати, я также нашел еще одну ошибку механизации, в которой <textarea>
, которая содержится в <p>
, не распознается как действительный элемент управления, но как только вы вынимаете его из контейнера <p>
, он распознает только штраф, И я проверил, textarea разрешено включать в другие элементы уровня блока, такие как <p>
.