How to save web page as image using python
Question: I am using python to create a "favorites" section of a website. Part of what I
want to do is grab an image to put next to their link. So the process would be
that the user puts in a URL and I go grab a screenshot of that page and
display it next to the link. Easy enough?

I have currently downloaded [pywebshot](http://www.coderholic.com/pywebshot-
generate-website-thumbnails-using-python/) and it works great from my terminal
on my local box. However, when I put it on the server, I get a Segmentation
Fault with the following traceback:

    
    
    /usr/lib/pymodules/python2.6/gtk-2.0/gtk/__init__.py:57: GtkWarning: could not open display
      warnings.warn(str(e), _gtk.Warning)
    ./pywebshot.py:16: Warning: invalid (NULL) pointer instance
      self.parent = gtk.Window(gtk.WINDOW_TOPLEVEL)
    ./pywebshot.py:16: Warning: g_signal_connect_data: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed
      self.parent = gtk.Window(gtk.WINDOW_TOPLEVEL)
    ./pywebshot.py:49: GtkWarning: Screen for GtkWindow not set; you must always set
    a screen for a GtkWindow before using the window
      self.parent.show_all()
    ./pywebshot.py:49: GtkWarning: gdk_screen_get_default_colormap: assertion `GDK_IS_SCREEN (screen)' failed
      self.parent.show_all()
    ./pywebshot.py:49: GtkWarning: gdk_colormap_get_visual: assertion `GDK_IS_COLORMAP (colormap)' failed
      self.parent.show_all()
    ./pywebshot.py:49: GtkWarning: gdk_screen_get_root_window: assertion `GDK_IS_SCREEN (screen)' failed
      self.parent.show_all()
    ./pywebshot.py:49: GtkWarning: gdk_window_new: assertion `GDK_IS_WINDOW (parent)' failed
      self.parent.show_all()
    Segmentation fault
    

I know that some things can't run in a pts environment, but honestly that's a
little beyond me right now. If I need to somehow pretend that my pts
connection is tty, I can try it. But at this point I'm not even sure what's
going on and I admit it's a bit over my head. Any help would be greatly
appreciated.

Also, if there's a web service that I can pass a url and receive an image,
that would work just as well. I am NOT married to the idea of pywebshot.

I do know that the server I'm on is running X and has all the necessary python
modules installed.

Thanks in advance.


Answer: I found [websnapr.com](http://websnapr.com) which is a web service that will
give you the image with just a little bit of work.

    
    
    import subprocess
    subprocess.Popen(['wget', '-O', MYFILENAME+'.png', 'http://images.websnapr.com/?url='+MYURL+'&size=s&nocache=82']).wait()
    

Easy as pie.

