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

时间:2015-04-03 15:57:55

标签: java automation headless-browser

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

虽然其他供应商提供易于使用的API,通常是基于RESTful JSON的框架或基于XML的Web服务,但Vendor X通过FTP完成所有工作。虽然其他供应商将其API调用划分为单独调用特定任务,但供应商X使用一个TDF执行多项任务。

后一个问题可能会破坏我们的整合能力,因为我们只关心更新一个数据集,但供应商X不会让我们提供这些信息而不提供我们不知道的许多其他信息(或关心)。

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

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

是否有适合此任务的可编程无头浏览器(java或其他)?一般来说,社区对这种方法有什么看法?如果没有干净的解决方案来完成这项任务,我们不得不求助于这种hackery,开发团队很容易说“我们不能支持有问题的供应商”,但因为它们非常有利可图,所以管理层也没有我们认为这是一种选择。

1 个答案:

答案 0 :(得分:1)

如果可以通过编程方式完成(例如通过生成GET或POST),那就是我之前的路线。 wgetcurl ...我从来没有尝试过将它们扩展到这样的任务,但是当我使用它们时它们相当强大且占用空间小它们用于大型顺序任务。但是我确定有些Java库允许你做类似的事情而且避免使用exec()(可能在某个地方的java.net中)。

如果它是一个JS重型网站,你可能不得不诉诸PhantomJS。这是一个JS驱动的无头Webkit,所以期望它占用大量的CPU时间和内存。但是,至少some努力为它做集群。 (Gecko有一个类似的项目,但它还没有无头。)