LoginSignup
8
8

More than 5 years have passed since last update.

Chrome webdriver でフルサイズのスクリーンショット撮るやつ

Posted at

http://qiita.com/myhr/items/dff7cee30182ab56f737
これのruby版。

ImageMagickが要る。

require "selenium-webdriver"
require 'rmagick'

module ChromeScreenShot
  def take_fullscreenshot(fname = "out.png")
    innerH = self.execute_script("return window.innerHeight")
    innerW = self.execute_script("return window.innerWidth")
    pageH  = self.execute_script("return document.documentElement.scrollHeight")
    pageW  = self.execute_script("return document.documentElement.scrollWidth")
    #p [innerW, innerH, pageW, pageH]

    img = Magick::Image.new(pageW, pageH)

    posY = 0
    while posY < pageH
      posX = 0
      while posX < pageW
        if posX > 0 and posX+innerW > pageW
          posX -= posX+innerW - pageW
        end
        if posY > 0 and posY+innerH > pageH
          posY -= posY+innerH - pageH
        end

        self.execute_script("window.scrollTo(%d, %d)" % [posX, posY])
        # NOTE: save_screenshot しないと scrollTo が反映されてないことがあった
        self.save_screenshot("/tmp/%s.%d_%d.png" % [fname, posX, posY])
        partial = Magick::Image.from_blob( self.screenshot_as(:png) )

        img.composite!(partial.first, posX, posY, Magick::OverCompositeOp)
        #p [posX, posY]

        posX += innerW
      end
      posY += innerH
    end

    img.write(fname)
  end
end

url = "http://qiita.com/myhr/items/dff7cee30182ab56f737"

wd = Selenium::WebDriver.for :chrome
wd.extend ChromeScreenShot
wd.navigate.to url
wd.take_fullscreenshot
wd.quit

ちなみに

position:fixed な要素があるとうまくいかないんだけど何か良さげな解決案ないですかね。

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8