无法在 Poltergeist 中使用 PhantomJS 渲染选项
Can't use PhantomJS render options in Poltergeist
提前为这个新问题道歉,但我在 SO 和其他地方花了几个小时试图解决这个问题,但无济于事。
我正在使用 Poltergeist as my Capybara driver in a Ruby on Rails app, to create and save screenshots with PhantomJS,我注意到一个奇怪的差异。
下面是the syntax直接使用PhantomJS创建截图的例子:
page.render('google_home.jpeg', {format: 'jpeg', quality: '100'});
我想使用 Poltergeist 来实现同样的目的——具体来说,以低分辨率截取屏幕截图(生成缩略图)。所以我尝试了 Poltergeist 的 documented method:
By default, only the viewport will be rendered (the part of the page that is in view). To render the entire page, use 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 中似乎没有任何方法可以做到这一点。我在这里明显遗漏了什么吗?
您不能通过 Poltergeist 将质量选项传递给底层 PhantomJS 脚本,因为没有选项作为 seen in the code (CoffeeScript is transpiled into JavaScript, so the actual code is here) 传递。但是,该项目是开源的,因此您可以轻松地将此功能添加到 save_screenshot
函数和底层 PhantomJS 脚本(不要忘记创建拉取请求)。
当 :full
为 false 或未设置时,则仅渲染视口,因为 page.clipRect
属性 用于将渲染裁剪为当前视口大小。
提前为这个新问题道歉,但我在 SO 和其他地方花了几个小时试图解决这个问题,但无济于事。
我正在使用 Poltergeist as my Capybara driver in a Ruby on Rails app, to create and save screenshots with PhantomJS,我注意到一个奇怪的差异。
下面是the syntax直接使用PhantomJS创建截图的例子:
page.render('google_home.jpeg', {format: 'jpeg', quality: '100'});
我想使用 Poltergeist 来实现同样的目的——具体来说,以低分辨率截取屏幕截图(生成缩略图)。所以我尝试了 Poltergeist 的 documented method:
By default, only the viewport will be rendered (the part of the page that is in view). To render the entire page, use
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 中似乎没有任何方法可以做到这一点。我在这里明显遗漏了什么吗?
您不能通过 Poltergeist 将质量选项传递给底层 PhantomJS 脚本,因为没有选项作为 seen in the code (CoffeeScript is transpiled into JavaScript, so the actual code is here) 传递。但是,该项目是开源的,因此您可以轻松地将此功能添加到 save_screenshot
函数和底层 PhantomJS 脚本(不要忘记创建拉取请求)。
当 :full
为 false 或未设置时,则仅渲染视口,因为 page.clipRect
属性 用于将渲染裁剪为当前视口大小。