import sys
import os
from PyQt4 import QtCore, QtGui, QtWebKit

app = QtGui.QApplication([])

view = QtWebKit.QWebView()

def goToGoogle():
    view.setUrl(QtCore.QUrl('http://google.com'))

def goToWikipedia():
    view.setUrl(QtCore.QUrl('http://wikipedia.org'))

def goToCnn():
    view.setUrl(QtCore.QUrl('http://cnn.com'))

def saveHistory():
    print view.page().history()
    # <PyQt4.QtWebKit.QWebHistory object at 0x3565f58>

    # Create a QDataStream for later tests
    filename = "/tmp/history-temp"
    file = QtCore.QFile(filename)
    file.open(QtCore.QIODevice.WriteOnly)
    out = QtCore.QDataStream(file)

    ## Try a QDataStream
    #try:
    #    out << view.page().history()
    #except Exception, e:
    #    print "%s: %s" % (e.__class__.__name__, e)
    #    # TypeError: unsupported operand type(s) for <<: 'QDataStream' and 'QWebHistory'
    #else:
    #    print "Success!"
    #
    ## Try a file-like object
    #try:
    #    sys.stdout << view.page().history()
    #except Exception, e:
    #    print "%s: %s" % (e.__class__.__name__, e)
    #    # TypeError: unsupported operand type(s) for <<: 'file' and 'QWebHistory'
    #else:
    #    print "Success!"
    #
    ## Try a file-like object with .write()
    #try:
    #    sys.stdout.write(view.page().history())
    #except Exception, e:
    #    print "%s: %s" % (e.__class__.__name__, e)
    #    # TypeError: argument 1 must be string or read-only character buffer, not QWebHistory
    #else:
    #    print "Success!"

    # Try a QDataStream with .__lshift__()
    try:
        out.__lshift__(view.page().history())
    except Exception, e:
        print "%s: %s" % (e.__class__.__name__, e)
    else:
        print "Success!"

    file.close()

    print "History file size:", os.path.getsize(filename)
    # History file size: 0

QtCore.QTimer.singleShot(200, goToGoogle)


