为新问题提前道歉,但我花了好几个小时在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中,该方法接受文件名和包含键format
和quality
的哈希。然而,据我所知,无论如何,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中做到这一点。有什么明显的东西我在这里不见了吗?
答案 0 :(得分:1)
您无法通过Poltergeist将质量选项传递给基础PhantomJS脚本,因为没有选项作为seen in the code传递(CoffeeScript被转换为JavaScript,因此实际代码为here) 。但是,该项目是开源的,因此您可以轻松地将此功能添加到save_screenshot
函数和基础PhantomJS脚本中(不要忘记创建拉取请求)。
当:full
为false或未设置时,则仅渲染视口,因为page.clipRect
属性用于将渲染裁剪为当前视口大小。