Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys
- import cairo, gi
- USE_GTK2 = True
- if USE_GTK2:
- gi.require_version('Gtk', '2.0')
- gi.require_version('Gdk', '2.0')
- gi.require_version('WebKit', '1.0')
- from gi.repository import Gtk, Gdk, WebKit
- DEFAULT_SIZE = 800, 480
- if len(sys.argv) != 3:
- print 'usage: %s url filename'%sys.argv[0]
- sys.exit(-1)
- uri, filename = sys.argv[1:]
- for scheme in ('http://', 'https://', 'ftp://', 'file://'):
- if uri.startswith(scheme):
- break
- else:
- uri = 'http://' + uri
- window = Gtk.OffscreenWindow()
- view = WebKit.WebView()
- settings = view.get_settings()
- settings.props.auto_resize_window = True
- settings.props.enable_plugins = False
- view.set_settings(settings)
- window.add(view)
- def capture_window(window):
- w, h = window.get_size()
- if w < 50 or h < 50:
- # window is too small.
- # resize window and reload
- window.set_default_size(*DEFAULT_SIZE)
- view.reload()
- return
- dst = cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h)
- ctx = cairo.Context(dst)
- surface = Gdk.cairo_create(window.get_window()).get_target()
- ctx.set_source_surface(surface)
- ctx.paint()
- dst.write_to_png(filename)
- Gtk.main_quit()
- def load_cb(webview, pspec, window):
- if webview.get_load_status() == WebKit.LoadStatus.FINISHED:
- capture_window(window)
- view.connect('notify::load-status', load_cb, window)
- view.load_uri(uri)
- window.show_all()
- Gtk.main()
Advertisement
Add Comment
Please, Sign In to add comment