我正在计划一个供我自己在内部使用的 web 服务,它接受一个参数,一个 URL,并返回表示从该 URL解析的DOM 的 html。通过已解决,我的意思是 web 服务将首先获取该 URL 处的页面,然后使用 PhantomJS 来“渲染”页面,然后在执行所有 DHTML、AJAX 调用等之后返回结果源。然而,基于每个请求(我现在正在这样做)启动幻象太慢了。我宁愿拥有一个 PhantomJS 实例池,其中一个始终可以为我的 web 服务的最新调用提供服务。
以前有没有在这种事情上做过任何工作?我宁愿这个 web 服务基于其他人的工作,也不愿从头开始为自己编写一个池管理器/http 代理服务器。
更多上下文:我在下面列出了到目前为止我看到的 2 个类似项目,以及为什么我避开了每个项目,从而导致了这个关于管理 PhantomJS 实例池的问题。
jsdom - 据我所见,它具有在页面上执行脚本的强大功能,但它不会尝试复制浏览器行为,所以如果我将它用作通用“DOM 解析器”,最终会成为处理各种边缘情况、事件调用等的大量额外编码。我看到的第一个示例是必须为我使用 node.js 设置的测试应用程序手动调用 body 标签的 onload() 函数。这似乎是一个深兔子洞的开始。
Selenium - 它只是有更多的移动部件,因此设置一个池来管理长期存在的浏览器实例将比使用 PhantomJS 更复杂。我不需要它的任何宏录制/脚本优势。我只想要一个 Web 服务,它在获取网页和解析它的 DOM 方面的性能就像我用浏览器浏览到那个 URL 一样(或者如果我可以让它忽略图像等甚至更快)