【发布时间】:2014-08-26 06:08:29
【问题描述】:
我们的 Rails 应用需要从给定域中获取多个 URL 的快照。目前这些只是简单的 GET 请求,但未来用户将能够在拍摄快照之前输入更复杂的指令,例如单击页面元素、填写表单等。我已选择 PhantomJS 作为后端,但我不清楚与之交互的最佳方式。
PhantomJS 的网站有非常清晰的文档和示例,说明如何使用预先编写的 JS 脚本和参数来控制它。如果您的交互都可以在严格的脚本中捕获,这似乎很有效:创建页面实例,加载 URL,做一些事情,然后调用 phantom.exit();。
但在我们的例子中,我们希望能够像 Capybara 那样向持久浏览器会话发送各种指令。例如,给定的用户定义脚本可能会调用加载 URL,按 ID 单击元素,然后呈现具有参数定义的浏览器宽度的屏幕截图。然后单击一个链接或加载另一个 URL 并执行更多操作等。因此,虽然我们的迫切需求(加载 URL 并截取屏幕截图)可以轻松地处理为 10 行 JS 脚本,但似乎很快我们就会需要能够以更模块化的方式发送命令,将命令发送到持久的 PhantomJS 浏览器打开状态,该浏览器在命令之间保持打开状态,直到我们明确关闭它。
有没有办法“模块化”我与 PhantomJS 的通信?通过查看Poltergeist 代码,我看到他们使用网络套接字向 PhantomJS 发送单个请求。我需要学习如何做到这一点吗?我应该只使用Capybara吗?我缺少一些更简单的解决方案吗?
提前致谢。只是想弄清楚如何从这里开始。
【问题讨论】:
-
在这里查看我的答案:stackoverflow.com/a/25221906/1816580
-
谢谢,这个答案有帮助。你有使用 Capybara 做这种事情的经验吗?
-
不,我没有。建议的解决方案只有在您可以并且想要自己制作所有东西时才可行。
标签: javascript ruby-on-rails phantomjs poltergeist