Я безуспешно пытался использовать параметр 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>
, он распознается просто отлично , И я проверил, текстовая область разрешена для включения в другие элементы уровня блока, такие как <p>
.