webkitで表示したHTMLのスナップショットを取る
説明は後。とりあえずソースだけ。
class PyScreenShoterWebkit: def __init__(self, urllist = None, savedir="/tmp", shot_delegate_method=None): self.url = [] self.parentdir = savedir self.now_loading_url = '' if isinstance(urllist, list): self.url = urllist else: self.url.append(urllist) if not __GTK_MOZEMBED__: return self.parent = None self.widget = None self.width = 512 self.height = 510 self.countdown = 3 self.shot_delegate_method = shot_delegate_method self.main() def main (self): # Window set if not self.parent: self.parent = gtk.Window(gtk.WINDOW_TOPLEVEL) self.parent.set_border_width(10) if not self.widget: self.widget = webkit.WebView() self.widget.connect("load-finished", self.on_net_stop) self.widget.set_size_request(1024,1020) self.parent.add(self.widget) self.now_loading_url = self.url.pop() if not self.now_loading_url: self.widget.destroy() self.parent.destroy() return True self.countdown = 3 self.widget.open(self.now_loading_url) self.widget.show_all() self.parent.show_all() def getName (self): if __VERBOSE__ > 0: print 'get name' return hashlib.md5(self.now_loading_url).hexdigest() def on_net_stop(self, name='', title='', url=''): if __VERBOSE__ > 0: print 'on net stop' gobject.timeout_add(3000, self.do_countdown, self) def do_countdown(self,data = None): if __VERBOSE__ > 0: print 'do countdown' self.countdown -= 1 if self.countdown > 0: time.sleep(1.0) gobject.timeout_add(3000, self.do_countdown, self) return True else: self.countdown = 3 self.screenshot() return False def screenshot(self,data = None): import cairo if __VERBOSE__ > 0: print 'screenshot' pixbuf = self.widget.get_snapshot() f = pixbuf.cairo_create() path = os.path.abspath(self.parentdir) + '/' + self.getName() + ".png" f.get_target().write_to_png(path)