Beispiel #1
0
    def __init__(self,
            user_agent=default_user_agent,
            wait_timeout=8,
            wait_callback=None,
            log_level=logging.WARNING,
            display=False,
            viewport_size=(800, 600),
            ignore_ssl_errors=True,
            cache_dir=os.path.join(tempfile.gettempdir(), "ptwebkit.py"),
            plugins_enabled=False,
            java_enabled=False,
            plugin_path=['/usr/lib/mozilla/plugins', ],
            download_images=True,
            qt_debug=False,
            show_scroolbars=True,
            network_access_manager_class=None):
        
        self.http_resources = []
        self.user_agent = user_agent
        self.wait_callback = wait_callback
        self.wait_timeout = wait_timeout

        self.display = display

        if sys.platform.startswith('linux') and not 'DISPLAY' in os.environ\
                and not hasattr(PtWebkit, 'xvfb'):
            try:
                os.environ['DISPLAY'] = ':99'
                PtWebkit.xvfb = subprocess.Popen(['Xvfb', ':99'])
            except OSError:
                raise Error('Xvfb is required to a ghost run outside ' +
                            'an X instance')

        if not PtWebkit._app:
            PtWebkit._app = QApplication.instance() or QApplication(['ghost'])
            qInstallMsgHandler(QTMessageProxy(qt_debug))
            if plugin_path:
                for p in plugin_path:
                    PtWebkit._app.addLibraryPath(p)

        if network_access_manager_class is not None:
            self.page.setNetworkAccessManager(network_access_manager_class())

        self.page = PtWebPage(PtWebkit._app, self)
        QWebSettings.setMaximumPagesInCache(0)
        QWebSettings.setObjectCacheCapacities(0, 0, 0)
        QWebSettings.globalSettings().setAttribute(
            QWebSettings.LocalStorageEnabled, True)

        self.page.setForwardUnsupportedContent(True)
        self.page.settings().setAttribute(
            QWebSettings.AutoLoadImages, download_images)
        self.page.settings().setAttribute(
            QWebSettings.PluginsEnabled, plugins_enabled)
        self.page.settings().setAttribute(QWebSettings.JavaEnabled,
            java_enabled)

        if not show_scroolbars:
            self.page.mainFrame().setScrollBarPolicy(Qt.Vertical,
                Qt.ScrollBarAlwaysOff)
            self.page.mainFrame().setScrollBarPolicy(Qt.Horizontal,
                Qt.ScrollBarAlwaysOff)

        self.set_viewport_size(*viewport_size)


        # Page signals
        self.page.loadFinished.connect(self._page_loaded)
        self.page.loadStarted.connect(self._page_load_started)
        self.page.unsupportedContent.connect(self._unsupported_content)

        self.manager = self.page.networkAccessManager()
        
        self.manager.finished.connect(self._request_ended)
        self.manager.sslErrors.connect(self._on_manager_ssl_errors)
        # Cache
        if cache_dir:
            self.cache = QNetworkDiskCache()
            self.cache.setCacheDirectory(cache_dir)
            self.manager.setCache(self.cache)
        else:
            self.cache = None

        
        # Cookie jar
        self.cookie_jar = QNetworkCookieJar()
        self.manager.setCookieJar(self.cookie_jar)

        self.main_frame = self.page.mainFrame()

        # User Agent
        self.page.setUserAgent(self.user_agent)
        
        #logger.setLevel(log_level)

        class GhostQWebView(QtWebKit.QWebView):
            def sizeHint(self):
                return QSize(*viewport_size)

        self.webview = GhostQWebView()

        if plugins_enabled:
            self.webview.settings().setAttribute(
                QtWebKit.QWebSettings.PluginsEnabled, True)
        if java_enabled:
            self.webview.settings().setAttribute(
                QtWebKit.QWebSettings.JavaEnabled, True)

        self.webview.setPage(self.page)

        if self.display:
            self.webview.show()