У меня есть скрипт механизации, написанный на питоне, который заполняет веб-форму и должен нажать кнопку «создать». Но есть проблема, форма имеет две кнопки. Один для «добавить прикрепленный файл» и один для «create». Оба имеют тип «submit», а кнопка «Прикрепить» - первая. Поэтому, когда я выбираю форум и делаю команду br.submit(), он нажимает кнопку «attach» вместо «create». Экстенсивный Googling не принес ничего полезного для выбора конкретной кнопки в форме. Кто-нибудь знает какие-либо способы пропустить первую кнопку «Отправить» и нажать вторую?Python mechanize - две кнопки типа 'submit'
ответ
Я пробовал использовать параметр 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 />
... и, что еще меньше смысла, у меня не могло быть ничего между двумя кнопками отправки.
Это расстраивало меня нет конца, что Mechanize/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>
работал отлично (на нескольких строках, что также не должно было иметь значения).
Мне нравится механизировать, потому что он был прост в установке (просто скопируйте файлы в каталог включения) и потому, что он довольно прост в использовании, но если я не пропущу что-то важное, я думаю, что такие ошибки выглядят ужасно - Я не могу придумать вескую причину, почему первый пример должен потерпеть неудачу, а второй должен работать.
И, кстати, я нашел другой механизировать ошибка, при которой <textarea>
который содержится в <p>
не признается в качестве действительного контроля, но как только вы берете его из <p>
контейнера он признан только штрафом. И я проверил, textarea - разрешено включать в другие элементы уровня блока, такие как <p>
.
Я могу говорить из опыта, используя HTTP, а не механизировать, но я думаю, что это, вероятно, то, что вы хотите.
Когда в форме есть две кнопки отправки, сервер может определить, какой из них был нажат, потому что клиент должен добавить аргумент для кнопки отправки. Итак:
<form action="blah" method="get">
<p>
<input type="submit" name="button_1" value="One" />
<input type="submit" name="button_2" value="Two" />
</p>
</form>
Примет вас либо URL:
blah?button_1=One
или:
blah?button_2=Two
В зависимости от которой была нажата кнопка.
Если вы программно определяете, какие аргументы должны быть отправлены, вам нужно добавить аргумент с именем кнопки отправки, которая была нажата, и это значение.
Я предлагаю вам использовать Twill, который использует механизацию (в основном, обезьяну). Итак, у вас есть форма с некоторыми полями и две кнопки отправки с именами «submit_to_preview» и «real_submit». Следующий код должен работать.
BTW Помните, что это не потокобезопасно, поэтому вы можете использовать блокировки в случае, если вы хотите использовать код в потоковом env.
import twill.commands
b = twill.get_browser()
url = "http://site/myform"
twill.commands.go(url)
twill.commands.fv("2", "name", "Me")
twill.commands.fv("2", "age", "32")
twill.commands.fv("2", "comment", "useful article")
twill.commands.browser.submit("real_submit")
Надеюсь, что это поможет. Приветствия.
Используйте метод 'click'. Например.
mybrowser.select_form(nr=0)
req = mybrowser.click(type="submit", nr=1)
mybrowser.open(req)
Должно работать.
- 1. Python Mechanize Form submit
- 2. Python mechanize form submit не работает
- 3. python mechanize javascript submit button проблема!
- 4. Python mechanize click submit on multi submit form
- 5. кнопки Perl Mechanize отправить
- 6. mechanize python Нажмите кнопку
- 7. После нажатия кнопки отправки в Python Mechanize
- 8. WWW :: Mechanize :: PhantomJS Javascript form submit
- 9. python mechanize нажмите на кнопку
- 10. Python scraper mechanize/javascript
- 11. Python Mechanize - Войти
- 12. Python mechanize checkboxes
- 13. Python Mechanize Отправить кнопку на сайте NIH
- 14. Ruby mechanize - различать две формы с их содержимым
- 15. Кнопки отправки Ruby Mechanize не работают правильно
- 16. Ссылка на две страницы jsp с помощью кнопки Submit Liferay
- 17. Отправить две формы с помощью кнопки ajax one submit
- 18. Две кнопки Submit для двух контроллеров на одном Руби форме
- 19. Две кнопки изображения типа с тем же изображением
- 20. Mechanize - Python Issue
- 21. ввод типа submit vs кнопка ввода типа
- 22. Нажмите две кнопки одновременно
- 23. python mechanize yahoo mail
- 24. python mechanize new page
- 25. Python mechanize on Raspbian
- 26. Pinterest Использование Python Mechanize
- 27. python mechanize заполнение формы
- 28. python mechanize proxy question
- 29. Python Mechanize Загрузить файл
- 30. python mechanize._html.ParseError