|
|
|
|
|
import sys |
|
from PyQt4.QtCore import * |
|
from PyQt4.QtGui import * |
|
from PyQt4.QtWebKit import * |
|
from PyQt4.QtNetwork import * |
|
|
|
|
|
|
|
|
|
import webkit2png |
|
|
|
|
|
|
|
class Options(): |
|
url = None |
|
output_filename = None |
|
cookie = None |
|
|
|
|
|
class ChessScreenshotServer(): |
|
"""docstring for ChessScreenshotServer""" |
|
def __init__(self, url=None, output_filename=None): |
|
self.options = Options() |
|
self.options.url = url |
|
self.options.output_filename = output_filename |
|
|
|
self.app = self.init_qtgui() |
|
|
|
def init_qtgui(self, display=None, style=None, qtargs=None): |
|
"""Initiates the QApplication environment using the given args.""" |
|
if QApplication.instance(): |
|
print ("QApplication has already been instantiated.\n" |
|
"Ignoring given arguments and returning existing QApplication.") |
|
return QApplication.instance() |
|
|
|
qtargs2 = [sys.argv[0]] |
|
qtargs2.extend(qtargs or []) |
|
|
|
return QApplication(qtargs2) |
|
|
|
def renderScreenshotToFile(self): |
|
"""This is run within QT""" |
|
try: |
|
renderer = webkit2png.WebkitRenderer() |
|
|
|
renderer.qWebSettings[QWebSettings.JavascriptEnabled] = True |
|
if self.options.cookie: |
|
renderer.cookies = [self.options.cookie] |
|
with open(self.options.output_filename, 'w') as f: |
|
renderer.render_to_file(res=self.options.url, file_object=f) |
|
print "\tSaved screenshot to '%s'" % f.name |
|
QApplication.exit(0) |
|
except RuntimeError, e: |
|
print "Error:", e |
|
print >> sys.stderr, e |
|
QApplication.exit(1) |
|
|
|
|
|
def takeScreenshot(self, url=None, output_filename=None): |
|
if url: |
|
self.options.url = url |
|
if output_filename: |
|
self.options.output_filename = output_filename |
|
|
|
QTimer.singleShot(0, self.renderScreenshotToFile) |
|
return self.app.exec_() |
|
|
|
def takeChessScreenshot(self, fen_string=None, output_filename=None, |
|
cookie=None): |
|
"""Take uncropped screenshot of lichess board of FEN string and save to file""" |
|
url_template = "http://en.lichess.org/editor/%s" |
|
if cookie: |
|
self.options.cookie = cookie |
|
return self.takeScreenshot(url_template % fen_string, output_filename) |