闹鬼:裁剪截图
Poltergeist: Cropped screenshot
这是我的 Poltergeist 设置:
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, { screen_size: [1024, 768], window_size: [1024, 768] })
end
Capybara.default_driver = :poltergeist
Capybara.javascript_driver = :poltergeist
browser = Capybara.current_session
# browser.driver.resize(1024, 768)
# browser.driver.resize_window(1024, 768)
# browser.current_window.resize_to(1024, 768)
browser.visit('https://en.wikipedia.org/wiki/Poltergeist')
browser.save_screenshot('test.jpg')
屏幕截图大小正确,但浏览器 window 本身被裁剪了:
我也尝试了评论的调整大小方法,但没有解决这个问题。
什么会导致浏览器 window 被裁剪?
Poltergeists 渲染由 PhantomJS 控制。这看起来是由维基百科使用 CSS 引起的,PhantomJS 不支持或存在错误。不幸的是,当前发布的 PhantomJS 版本 (2.1.1) 基本上等同于 Safari 5,所以它远不是最新的。对此有一些可能的潜在解决方案。努力程度
如果您使用的平台可以是当前的 Poltergeist 2.5.0 beta 版本之一 运行,请尝试使用它,因为它在 CSS 中是最新的并且JS支持
使用execute_script
注入Poltergeist支持的CSS并覆盖损坏的CSS。高度特定于站点,因此如果您不仅要获取维基百科的屏幕截图,它可能不实用。
换成使用 selenium with headless chrome 来生成你的截图。
#3 可能会或可能不会比 #2 更容易,具体取决于您的完整设置
这是我的 Poltergeist 设置:
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, { screen_size: [1024, 768], window_size: [1024, 768] })
end
Capybara.default_driver = :poltergeist
Capybara.javascript_driver = :poltergeist
browser = Capybara.current_session
# browser.driver.resize(1024, 768)
# browser.driver.resize_window(1024, 768)
# browser.current_window.resize_to(1024, 768)
browser.visit('https://en.wikipedia.org/wiki/Poltergeist')
browser.save_screenshot('test.jpg')
屏幕截图大小正确,但浏览器 window 本身被裁剪了:
我也尝试了评论的调整大小方法,但没有解决这个问题。 什么会导致浏览器 window 被裁剪?
Poltergeists 渲染由 PhantomJS 控制。这看起来是由维基百科使用 CSS 引起的,PhantomJS 不支持或存在错误。不幸的是,当前发布的 PhantomJS 版本 (2.1.1) 基本上等同于 Safari 5,所以它远不是最新的。对此有一些可能的潜在解决方案。努力程度
如果您使用的平台可以是当前的 Poltergeist 2.5.0 beta 版本之一 运行,请尝试使用它,因为它在 CSS 中是最新的并且JS支持
使用
execute_script
注入Poltergeist支持的CSS并覆盖损坏的CSS。高度特定于站点,因此如果您不仅要获取维基百科的屏幕截图,它可能不实用。换成使用 selenium with headless chrome 来生成你的截图。
#3 可能会或可能不会比 #2 更容易,具体取决于您的完整设置