不能在Poltergeist中使用PhantomJS渲染选项

时间:2015-12-29 21:45:13

标签: ruby-on-rails phantomjs poltergeist

为新问题提前道歉,但我花了好几个小时在SO和其他地方试图解决这个问题,但无济于事。

我在Ruby on Rails应用程序中使用Poltergeist作为我的Capybara驱动程序,使用PhantomJS创建和保存屏幕截图,我发现了一个奇怪的差异。

以下是使用PhantomJS直接创建屏幕截图的the syntax示例:

page.render('google_home.jpeg', {format: 'jpeg', quality: '100'});

我想用Poltergeist来实现同样的目的 - 特别是以低分辨率拍摄截图(制作缩略图)。所以我尝试了Poltergeist的documented method

  

默认情况下,仅渲染视口(视图中的页面部分)。要呈现整个页面,请使用save_screenshot('/path/to/file.png', :full => true)

请注意,参数不同。在Poltergeist中,该方法接受文件名和包含键full的哈希,而在PhantomJS中,该方法接受文件名和包含键formatquality的哈希。然而,据我所知,无论如何,Poltergeist只是将其论点传递给PhantomJS'render方法,所以我不明白发生了什么。

具体来说,我查看了Poltergeist的源代码,并将save_screenshot方法(只是render的别名)跟踪到here

def render(path, options = {})
  check_render_options!(options)
  command 'render', path.to_s, !!options[:full], options[:selector]
end

这就是我失去情节的地方。我可以成功地使用Poltergeist语法来完成它所说的将要发生的事情(将full设置为true获取整个页面的屏幕截图; false只捕获视口),但我无法弄清楚当PhantomJS本身甚至不接受full作为参数时,为什么会这样。

更糟糕的是,我实际上需要调整质量,但似乎没有任何方法可以在Poltergeist中做到这一点。有什么明显的东西我在这里不见了吗?

1 个答案:

答案 0 :(得分:1)

您无法通过Poltergeist将质量选项传递给基础PhantomJS脚本,因为没有选项作为seen in the code传递(CoffeeScript被转换为JavaScript,因此实际代码为here) 。但是,该项目是开源的,因此您可以轻松地将此功能添加到save_screenshot函数和基础PhantomJS脚本中(不要忘记创建拉取请求)。

:full为false或未设置时,则仅渲染视口,因为page.clipRect属性用于将渲染裁剪为当前视口大小。