2009-03-04 50 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端口,我想了很多其他语言也存在类似的库。