1

Я изо всех сил пытаюсь найти решение этого вопроса, попробовав множество вариантов.Полная скриншоты страницы в 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" 

Это имеет различные проблемы,

Третья попытка (с помощью 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

Но не удалось получить его работу.

Любые предложения были бы очень благодарны спасибо!

ответ

1

Поскольку на этот вопрос никто не ответил, я подумал, что изложу решение, которое я использовал как можно ближе к идеалу.

В конце концов, пока эти вопросы с фантомным JS не решены

он появляется только драйвером, способного обеспечить полный скриншот высоты является драйвером Firefox.

Хотя он не поддерживает сетчатку, используя пиксели устройства для моих целей, я смог преобразовать с помощью CSS масштаб до 200%, а большинство элементов (за исключением растровых изображений) точны.

Для рабочего примера скрининга конкретного твита при разрешении сетчатки в Ruby см. Здесь: https://github.com/chrism/twitter-screenshot

 Смежные вопросы

  • Нет связанных вопросов^_^