Exemple #1
0
    def __init__(self, parent=None):
        super(WbNetworkAccessManager, self).__init__(parent)
        self.sslErrors.connect(_WbNetworkAccessManager.onSslErrors)
        self.finished.connect(_WbNetworkAccessManager.onReplyFinished)

        # Enable offline cache
        cache = QNetworkDiskCache(self)
        cache.setCacheDirectory(
            rc.DIR_CACHE_NETMAN
        )  # QNetworkDiskCache will create this directory if it does not exists.
        self.setCache(cache)

        # Load cookies
        jar = WbNetworkCookieJar(rc.COOKIES_LOCATION)
        self.setCookieJar(jar)
Exemple #2
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(), "ghost.py"),
                 plugins_enabled=False,
                 java_enabled=False,
                 plugin_path=[
                     '/usr/lib/mozilla/plugins',
                 ],
                 download_images=True,
                 qt_debug=False,
                 show_scroolbars=True,
                 xvfb_extra_args=None):
        xvfb_extra_args = xvfb_extra_args or []
        self.http_resources = []

        self.user_agent = user_agent
        self.wait_timeout = wait_timeout
        self.wait_callback = wait_callback
        self.ignore_ssl_errors = ignore_ssl_errors
        self.loaded = True

        if not sys.platform.startswith('win') and not 'DISPLAY' in os.environ\
                and not hasattr(Ghost, 'xvfb'):
            try:
                os.environ['DISPLAY'] = ':99'
                os.environ['PATH'] = '%s:%s' % ('/bin:/usr/bin',
                                                os.environ.get('PATH'))
                xvfb_args = ['Xvfb', ':99']
                xvfb_args.extend(xvfb_extra_args)
                Ghost.xvfb = subprocess.Popen(xvfb_args)
                time.sleep(0.5)
            except OSError as e:
                raise Error('Xvfb is required to a ghost run outside ' +
                            'an X instance. Error: %s. Args: %s. Path: %s' %
                            (unicode(e), xvfb_args, os.environ['PATH']))

        self.display = display

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

        self.popup_messages = []
        self.page = GhostWebPage(Ghost._app, self)
        QtWebKit.QWebSettings.setMaximumPagesInCache(0)
        QtWebKit.QWebSettings.setObjectCacheCapacities(0, 0, 0)
        QtWebKit.QWebSettings.globalSettings().setAttribute(
            QtWebKit.QWebSettings.LocalStorageEnabled, True)

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

        if not show_scroolbars:
            self.page.mainFrame().setScrollBarPolicy(
                QtCore.Qt.Vertical, QtCore.Qt.ScrollBarAlwaysOff)
            self.page.mainFrame().setScrollBarPolicy(
                QtCore.Qt.Horizontal, QtCore.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
        self.cache = QNetworkDiskCache()
        self.cache.setCacheDirectory(cache_dir)
        self.manager.setCache(self.cache)
        # Cookie jar
        self.cookie_jar = QNetworkCookieJar()
        self.manager.setCookieJar(self.cookie_jar)
        # User Agent
        self.page.setUserAgent(self.user_agent)

        self.page.networkAccessManager().authenticationRequired\
            .connect(self._authenticate)
        self.page.networkAccessManager().proxyAuthenticationRequired\
            .connect(self._authenticate)

        self.main_frame = self.page.mainFrame()

        logger.setLevel(log_level)

        if self.display:

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

            self.webview = MyQWebView()
            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)
            self.webview.show()
        else:
            self.webview = None