| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Как из Java клиента нажать button на html form? |
| Автор: tigerkvv 27.7.2010, 06:31 | ||
| Есть сторонний сервер с веб интерфейсом для ввода данных. Есть собственное ПО и СУБД. Задача. Отгружать в конце дня накопленные данные из нашего сервера на центральный через эту веб форму. (согласен - реализация через одно место, но пока центр не напишет новое ПО приходится ручками вводить себе и потом им) Все бы ничего, но на их html страничке две формы: первая содержит поля для ввода данных, вторая кнопку без submit - которая вызывает их процедуру проверки данных и загрузку в центральный сервер. Выглядит эта страничка так:
Первую форму я без проблем заполняю, но ввод данных не происходит. В выходном потоке получается эта же страничка с заполненными полями первой формы. Как программно нажать кнопку во второй форме после заполнения первой? |
| Автор: AntonSaburov 27.7.2010, 16:52 |
| А не проще ли посмотреть, что за HTTP запрос формируется и делать его прямо из приложения ? |
| Автор: tigerkvv 28.7.2010, 12:38 |
| Конечно проще, сразу смотрел, но функции checkpatternagain нигде в коде нет и что она делает конкретно - загадка. Уточню, выше писал что запрос с данными для первой формы (данные которые надо отправить) делается нормально. При его выполнении заполняются поля с данными, но отправка не происходит как обычно в более простых случаях. Сервер возвращает ту же форму для заполнения данных но с моими данными. А вот заставить сервер принять данные в обработку получается только нажав на кнопку во второй форме. Как все-таки нажать на эту кнопку программно? Или как после заполнения выполнить скрипт который в ней прописан в ONCLICK='if(checkpatternagain())with(document.forms.formInput){toimik.value=document.forms.formSubmit.toimik.value;salastada.value=(document.forms.formSubmit.salastada.checked ? 1 : 0);operation.value="search";target="_self";submit();}' |
| Автор: chaos 28.7.2010, 13:53 |
| tigerkvv, а обязательно яву использовать? я для таких целей исползую perl - все очень просто и приятно |
| Автор: tigerkvv 28.7.2010, 14:12 |
| chaos, Наше ПО - это большой комплекс написанный и развивающийся сейчас на JAVA. Хотелось бы все делать с одного рабочего места, сейчас это приемная. Девушка заполняет целый день какие-то данные, прога должна вечером отправлять, выдавать ошибки если что. Очень неудобно и некрасиво если для этого прийдется запускать что-то другое, потом эти ошибки исправлять у себя в базе (своим клиентом), потом опять другим пытаться отправить второй раз )))) Геморой. Надо все красиво и из одного окошка. Разве что есть красивый способ работать с перл из Явы? Думаю должен быть простой способ нажать кнопку из Явы. Типа получаем имя формы.объкт.submit ) Но я такого не знаю, может кто поможет. Перерыл уже много форумов и наших и буржуйских, прямого ответа не нашел ( |
| Автор: LSD 28.7.2010, 18:05 |
| Вопрос такой: а как вы вообще получаете этот HTML и заполняете поля формы? Вы используете какой-то системный браузер или что? |
| Автор: tigerkvv 28.7.2010, 18:38 | ||
| LSD, Сначала выполняется соединение , потом:
до анализа ошибок не доходит, если скопировать содержимое tpAnswer и просмотреть вручную или броузером, то видно страницу с заполненными параметрами и кнопочкой в конце. Если зайти на страницу броузером вручную то эта же, но пустая форма с кнопочкой (во второй форме) такие же. (см. первый пост) |
| Автор: Uvarov 29.7.2010, 01:40 |
| "... вторая кнопку без submit ..." - скорее всего ajax. ".. но функции checkpatternagain нигде в коде нет и что она делает конкретно - загадка ..." - Внимательно просмотрите все подключаемые *.js файлы. Если не нашли - плохо искали =) используйте FireBug(дополнение бр FireFox) для разбора post\get запросов, ajax тоже виден. или адресс сервера в студию, по возможности разберусь. В любом случае нажатие на кнопку программно - не логично. На много легче пост-методом передать php все данные. 2я кнопка скорее всего функция, которая передает переменные из javascript в php. |
| Автор: tigerkvv 29.7.2010, 02:21 |
| Uvarov, - так и есть, функция checkpatternagain действительно в подключаемом js - 2я кнопка запускает checkpatternagain, которая передает дополнительные переменные из javascript в php, но я никак не смог придумать как посмотреть что именно - жаль что вы не посоветовали FireBug вчера )), уже выяснил это через httpWatch, два дня потерял (и еще 3 до форума) ))) Всем спасибо за советы, в который раз убеждаюсь, как начнешь кому-то объяснять что тебе надо, так и сам начинаешь понимать как это сделать ))) PS: на форуме много тем с пометкой "решенные", но без явного объяснения как решилась проблема, типа "спасибо за ссылочку - помогло". Дабы не плодить такие темы поясню как решить подобные проблемы другим: - многие странички кроме явных полей для отправки содержат скрытые, кроме того есть еще неявные поля, которые формируются дополнительно скриптами - мало того что эти поля приходится искать по всем скриптам - их значения могут браться вообще за пределами странички, браться с сервера (или другого источника) - отловить такие ситуации помогла программа httpWatch (FireBug - не пробовал), с ее помощью можно увидеть полный набор параметров и их значений передаваемых при выполнении запроса - проанализировав эти данные можно сформировать "правильный" POST Надеюсь понятно и не утомительно ) |
| Автор: LSD 29.7.2010, 13:32 |
| Если страница не содержит хитрого JS, заточенного под конкретный браузер можно не мучатся с анализом HTTP запросов а просто взять тот же http://lobobrowser.org/ и в нем открыть страничку. Если же есть хитрые JS, то можно использовать http://jrex.mozdev.org/. |
| Автор: AntonSaburov 29.7.2010, 16:05 |
| Честно говоря все равно ен очень понимаю - почему нельзя просто проснифить, что именно отлетает как HTTP и просто сделать тоже самое. А весь этот JS - все равно в итоге "уедет" HTTP. |
| Автор: Temdegon 29.7.2010, 16:23 |
| Попробуйте библиотеку HTMLUnit http://htmlunit.sourceforge.net/ Это фактически браузер без отображения. Ей делать можно все что угодно - заполнять поля, сабмитить формы, получать значения элементов. Главнй ее плюс, что она исполняет JavaScript обрабатываемой сраницы. |
| Автор: tigerkvv 29.7.2010, 16:44 |
| AntonSaburov, httpWatch - можно сказать и есть снифер для броузеров, можно использовать конечно любой, просто этот очень удобен, заточен и показывает все про процесс обмена броузера с сервером в удобной , легко понимаемой форме. Сразу этого не сделал, т.к. был уверен, что заполняю все правильно, не первый раз такое делаю, вот и уперся в эту вторую форму с кнопкой. Теперь все нормально прикручиваю куки ) Temdegon, Спасибо, посмотрим что за библиотечка. |