在生产环境中自动化浏览器任务的最佳解决方案?

Best Solution for automating browser tasks in a Production environment?

我们在工作中遇到了困难。我们与许多第 3 方供应商进行集成,其中之一 Vendor X 被证明非常困难。

虽然其他供应商提供易于使用的 APIs,通常是基于 RESTful JSON 的框架或基于 XML 的 Web 服务,但供应商 X 所做的一切都是FTP。当其他供应商将他们的 API 调用划分为特定任务时,供应商 X 使用一个 TDF 来执行多个任务。

后一个问题可能会扼杀我们的集成能力,因为我们只关心更新一个数据集,但供应商 X 不会让我们在不提供大量我们不知道的其他信息(或关心)。

事实是,供应商 X 有一个门户网站,可以轻松更新此信息。从技术上讲,我可以编写一个登录此门户的客户端,扫描 html 以更新 table,然后提交表单。

我们的应用程序是用 Java 编写的,但是执行此类任务的大多数 Java 库(Selenium、HTMLUnit)似乎面向测试而不是执行企业级任务在重负荷下。据我所知,像 JSoup 这样的库在提交表单方面效果不佳。尽管我们只更新每条记录的一个整数字段并单击提交,但我仍然有点担心。

是否有适合此任务的可编程无头浏览器(java 或其他)?社区总体上对这种方法有何看法?当这个任务没有干净的解决方案并且我们不得不求助于这种 hackery 时,开发团队很容易简单地说,"we can't support the vendor in question",但因为它们非常有利可图,管理层并不认为这是一种选项。

如果它可以通过编程方式完成(例如通过生成 GET 或 POST),那是我首先要走的路线。 wgetcurl...我从来没有尝试将它们扩展到这样的任务,但是当我将它们用于大型顺序任务时,它们已经相当强大且占用空间小。但我确定有 Java 库允许您执行类似操作并避免 exec() (可能在 java.net 某处)。

但是,如果它是一个 JS 密集型站点,您可能不得不求助于 PhantomJS. That's a JS-driven headless Webkit, so expect it to eat a lot of CPU time and memory. There are at least some efforts to do clustering for it, though. (There's a similar project for Gecko,但它还不是无头的。)