2009-03-04 3 views
1

Я разрабатываю интерфейс между старым веб-приложением и другим. Это старое веб-приложение работает отлично, но нет никакого API для связи.Веб-автоматизации

Существует какой-либо программный способ сказать веб-форму что-то вроде: введите это значение в это поле, это другое и отправьте форму?

UPDATE: Я искал что-то вроде этого:

WebAutomation w = new WebAutomation("http://apphost/report"); 
w.forms[0].input[3].value = 123; 
w.forms[0].input[4].value = "hello"; 
Response r = w.forms[0].submit(); 
... 
+0

Не могли бы вы вдаваться в подробности, особенно в отношении вашего второго абзаца. –

+0

Я обновил более подробную информацию. – FerranB

ответ

3

Несмотря на тег на ваш вопрос, ответ будет высоко язык специфический. Также будет широкий спектр решений в зависимости от того, насколько сложна система, которую вы готовы реализовать, и насколько гибкий результат, который вы ищете.

С одной стороны, вы можете совершить много за очень короткий период времени с чем-то вроде Python's mechanize, но, с другой стороны, вы действительно можете попасть в кишки и иметь большой контроль, автоматизируя браузер, используя COM-объект, такой как SHDocVw (только для Windows).

Или, как предположил LoveMeSomeCode, вы действительно можете удариться головой о конкретный объект и начать подделывать POST-запросы, но при этом удастся выяснить, что ожидает сервер, если он делает какую-либо внешнюю обработку данных формы.

EDIT:

еще один вариант, если вы ищете что-то, что вы можете прийти до скорости на быстро, чтобы использовать модуль AutoIt IE «s, которая в основном обеспечивает программный интерфейс над экземпляром Internet Explorer (все его COM в нижней части, конечно). Имейте в виду, что это, вероятно, будет наименее приемлемым вариантом, который вы могли бы выбрать. Я лично использовал это для создания наборов для автоматизации концептуальных концепций, которые затем были перенесены на более надежную реализацию C#, где я сам обрабатывал COM-вызовы.

3

В .NET: http://watin.sourceforge.net/

В рубина: http://wtr.rubyforge.org/

Кроссплатформенность: http://seleniumhq.org/

+0

Эти первые два из них - это тестовые фреймворки, а третья - на основе макросов, я не уверен, что они действительно подходят для рутинной автоматизации, которую он собирается выполнять. – bouvard

+0

Selenium будет сложно программировать для выполнения таких задач. Я делал это раньше, но я знаю селен довольно хорошо, но он не предназначен для такого рода вещей. –

+0

Вы можете использовать Selenium IDE (плагин firefox) для записи того, что вы хотите. Тогда вам не нужно писать код (хотя сгенерированный код, вероятно, не самый лучший) –

3

Вы можете, но вы должны макетировать запрос POST. Поля (текстовые поля, переключатели и т. Д.) Передаются в виде пар ключ-значение обратно к ресурсу. Вам нужно сделать запрос на этот ресурс (в зависимости от того, какой из них используется в действии SUBMIT для тега FORM) и поместить все ваши пары значений поля в полезную нагрузку POST без запроса. Вот хорошая программа, чтобы увидеть, какие значения передаются: http://www.httpwatch.com Или вы можете использовать Firebug, бесплатное расширение Firefox.

2

Модуль Perl WWW::Mechanize делает именно это. Ваш пример будет выглядеть примерно так:

use WWW::Mechanize; 
my $agent = WWW::Mechanize->new; 
$agent->get("http://apphost/report"); 
my $response = $agent->submit_form(
    with_fields => { 
     field_1_name => 123, 
     field_2_name => "hello", 
    }, 
); 

Существует также порт Python, и я предполагаю, что существуют аналогичные библиотеки для многих других языков.