Я изо всех сил пытаюсь найти решение этого вопроса, попробовав множество вариантов.Полная скриншоты страницы в Retina Качество с использованием Ruby
Мой идеальный цель состоит в том, чтобы иметь возможность скриншот
- захватить конкретный CSS элемент
- Grab полную высоту элемента (даже если они больше, чем высота страницы)
- Wait для любые активы, содержащиеся в полностью загружены
- Fast
Первой попытки (с использованием Села nium-WebDriver с установленным chromedriver)
Gemfile
gem 'selenium-webdriver'
App.rb
require 'selenium-webdriver'
driver = Selenium::WebDriver.for :chrome
driver.get url
driver.save_screenshot("screenshot.png")
Это работает до некоторой степени, но скриншот обрезается до максимальной высоты (которая выглядит как очень старая проблема с Chromedriver https://code.google.com/p/chromedriver/issues/detail?id=294)
Вторая попытка (использование полтергейста для переключения на фантомные вместо этого)
Gemfile
gem 'capybara'
gem 'poltergeist'
App.rb
require "capybara/dsl"
require "capybara/poltergeist"
Capybara.run_server = false
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, {
# Raise JavaScript errors to Ruby
js_errors: true,
# Additional command line options for PhantomJS
phantomjs_options: ['--ignore-ssl-errors=yes', '--ssl-protocol=any'],
})
end
Capybara.current_driver = :poltergeist
class Screenshot
include Capybara::DSL
# Captures a screenshot of +url+ saving it to +path+.
def capture(url, path)
# Open page
visit url
if page.driver.status_code == 200
page.driver.save_screenshot(path, :full => true)
puts "screenshot saved"
else
# Handle error
puts "there was a problem #{page.driver.status_code}"
end
end
end
screenshot = Screenshot.new
screenshot.capture url, "screenshot.png"
Это имеет различные проблемы,
- он захватывает всю длину страницы
- Веб-шрифты не являются встроенный () 10)
- сетчатка не доступен (https://github.com/ariya/phantomjs/issues/10964)
Третья попытка (с помощью Capybara, чтобы попытаться воспользоваться page.save_screenshot (путь,: полный => верно))
Gemfile
gem 'selenium-webdriver'
gem 'capybara'
App.rb
require 'selenium-webdriver'
require "capybara/dsl"
Capybara.register_driver :chrome do |app|
Capybara::Selenium::Driver.new(app, :browser => :chrome)
end
Capybara.current_driver = :chrome
class Screenshot
include Capybara::DSL
# Captures a screenshot of +url+ saving it to +path+.
def capture(url, path)
# Open page
visit url
page.save_screenshot(path, :full => true)
puts "screenshot saved"
end
end
screenshot = Screenshot.new
screenshot.capture url, "screenshot.png"
Короткая версия - это не поможет
четвертой попытки (с помощью Watir)
Gemfile
gem 'watir-webdriver'
App.Р.Б.
require 'watir-webdriver'
b = Watir::Browser.new
b.goto url
b.screenshot.save 'screenshot.png'
Это работает (запускает Firefox), но имеет тот же вопрос по DevicePixelRatio для способности принять скриншот сетчатки.
Пятая попытка (вернуться к использованию Chrome)
App.rb
require 'watir-webdriver'
b = Watir::Browser.new :chrome
b.goto url
b.screenshot.save './tmp/watir.png'
Прямая спина к обрезанной вопросу страницы.
В идеале я думаю, что может быть способом для достижения этой цели, используя мобильные возможности эмуляции последней ChromeDriver v2.12
Задание индивидуального устройства Атрибуты
Также возможно для включения Mobile Emulation, указав отдельные атрибуты. Чтобы включить мобильную эмуляцию таким образом, словарь «mobileEmulation» может содержать словарь «deviceMetrics» и строку «userAgent». Следующие показатели устройства должны быть , указанные в словаре «deviceMetrics»: «ширина» - ширина в пикселей экрана «высота» устройства - высота в пикселях экрана устройства «pixelRatio» - отношение пикселя устройства
https://sites.google.com/a/chromium.org/chromedriver/mobile-emulation
Но не удалось получить его работу.
Любые предложения были бы очень благодарны спасибо!