【问题标题】:Web automation网络自动化
【发布时间】:2010-10-11 09:40:24
【问题描述】:

我正在开发一个基于 Web 的旧应用程序和另一个应用程序之间的接口。那个旧的基于 Web 的应用程序运行良好,但没有任何 API 可以与之通信。

有任何编程方式来表达一个网络表单,比如:在这个字段中输入这个值,这个在另一个中,然后提交表单?

更新:我正在寻找这样的东西:

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();
...

【问题讨论】:

  • 您能否详细说明一下,特别是关于您的第二段。

标签: language-agnostic automation


【解决方案1】:

【讨论】:

  • 前两个是测试框架,第三个是基于宏的,我不确定它们是否真的适合他正在考虑执行的那种日常自动化。
  • Selenium 很难让编程完成这样的任务。我以前做过,但我对 selenium 相当了解,但它不是为这类东西设计的。
  • 您可以使用 Selenium IDE(它是一个 firefox 插件)来记录您想要的内容。那你就不用写代码了(虽然生成的代码可能不是最好的)
【解决方案2】:

你可以,但你必须模拟一个 POST 请求。字段(文本框、单选按钮等)作为键值对传输回资源。您需要对此资源发出请求(无论在 FORM 标记的 SUBMIT 操作中使用哪个),并将所有字段值对放入 POST 有效负载中,而不是请求。 这是一个很好的程序,可以查看正在传输的值:http://www.httpwatch.com 或者,您可以使用 Firebug,一个免费的 Firefox 扩展。

【讨论】:

    【解决方案3】:

    尽管您的问题带有标签,但答案将是 高度 特定于语言的。根据您愿意实施的解决方案的复杂程度以及您所寻找的结果的灵活性,还会有多种解决方案。

    一方面,您可以使用 Python 的 mechanize 之类的东西在很短的时间内完成很多工作,但另一方面,您可以通过使浏览器自动化来真正进入胆量并进行大量控制使用 COM 对象,例如 SHDocVw(当然,仅限 Windows)。

    或者,正如 LoveMeSomeCode 所建议的那样,您真的可以将头撞到混凝土上并开始伪造 POST 请求,但如果服务器正在对表单数据进行任何前端处理,那么祝您好运。

    编辑:

    如果您正在寻找可以快速上手的东西,另一个选择是使用AutoIt 的 IE 模块,它基本上提供了一个基于 Internet Explorer 实例的编程接口(它的全部COM 在下面,当然)。请记住,这可能是您可以选择的最不支持的选项。我个人使用它来生成概念验证自动化套件,然后迁移到更强大的 C# 实现,我自己处理 COM 调用。

    【讨论】:

      【解决方案4】:

      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 端口,我猜许多其他语言也存在类似的库。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-12
        • 1970-01-01
        • 2011-03-17
        • 2011-04-24
        • 1970-01-01
        • 1970-01-01
        • 2012-05-14
        • 1970-01-01
        相关资源
        最近更新 更多