2009-03-04 57 views
1

我正在開發基於舊的基於Web的應用程序和另一個應用程序之間的接口。這個舊的基於網絡的應用程序工作正常,但沒有任何API與之通信。Web自動化

有任何程序化的方式來說一個網絡形式的東西,如:在這個字段上輸入這個值,這個插入其他並提交表單?

更新:我在尋找這樣的事情:

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

你可以進入更多的細節,特別是關於你的第二段。 – 2009-03-04 23:03:18

+0

我更新了更多細節。 – FerranB 2009-03-04 23:10:31

回答

3

儘管在你的問題上的標籤,答案將是高度語言特定。根據您願意實施的解決方案的複雜程度以及您所尋找的結果的靈活程度,還將有廣泛的解決方案。

一方面你可以在很短的時間內完成很多事情,例如Python的mechanize,但另一方面,通過使用瀏覽器自動化,你可以真正進入膽量並擁有很多控制權一個COM對象,如SHDocVw(當然,僅限於Windows)。

或者,正如LoveMeSomeCode建議的那樣,您可以真正對抗具體的問題並開始僞造POST請求,但是如果對錶單數據進行任何前端處理,希望搞清楚服務器期望的內容。

編輯:

還有一個選項,如果你正在尋找的東西,你可以拿出來快速瞭解,是使用AutoIt的IE模塊,在實例基本上提供編程接口Internet Explorer(當然,它下面的所有COM)。請記住,這可能是您可以選擇的最不受支持的選項。我親自用它來生成概念驗證自動化套件,然後將它們遷移到一個更強大的C#實現中,在那裏我自己處理COM調用。

3

可以,但你必須模擬一個POST請求。字段(文本框,單選按鈕等)作爲鍵值對發回資源。您需要爲這個資源(在FORM標籤的SUBMIT操作中使用哪一個)進行請求,並將所有的字段值對放在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端口,我想了很多其他語言也存在類似的庫。