def setProxy(self,arg): item = arg.split(':') if len(item) == 2: proxy = QNetworkProxy(QNetworkProxy.HttpProxy,item[0],int(item[1])) QNetworkProxy.setApplicationProxy(proxy) else: QNetworkProxyFactory.setUseSystemConfiguration(True)
def set_proxy(self, proxy=None): """Set the proxy or using system configuration as None,supported socks5 http{s}. @param proxy: Example:socks5://username:[email protected]:7070 """ proxy_type = None if proxy: parse = urlparse(proxy) scheme = parse.scheme hostname = parse.hostname port = parse.port username = parse.username or '' password = parse.password or '' if scheme == 'socks5': proxy_type = QNetworkProxy.Socks5Proxy elif scheme in ('http', 'https'): proxy_type = QNetworkProxy.HttpProxy if proxy_type: self.page.networkAccessManager().setProxy( QNetworkProxy(proxy_type, hostname, port, username, password) ) else: QNetworkProxyFactory.setUseSystemConfiguration(True)
def mainPyQt4Youtube(): # 必要なモジュールのimport from PyQt4.QtCore import QUrl from PyQt4.QtGui import QApplication from PyQt4.QtWebKit import QWebView, QWebSettings from PyQt4.QtNetwork import QNetworkProxyFactory url = 'https://www.youtube.com/?hl=ja&gl=JP' app = QApplication(sys.argv) # Youtube動画を読み込むための設定 QNetworkProxyFactory.setUseSystemConfiguration(True) QWebSettings.globalSettings().setAttribute(QWebSettings.PluginsEnabled, True) QWebSettings.globalSettings().setAttribute(QWebSettings.DnsPrefetchEnabled, True) QWebSettings.globalSettings().setAttribute(QWebSettings.JavascriptEnabled, True) QWebSettings.globalSettings().setAttribute(QWebSettings.OfflineStorageDatabaseEnabled, True) QWebSettings.globalSettings().setAttribute(QWebSettings.AutoLoadImages, True) QWebSettings.globalSettings().setAttribute(QWebSettings.LocalStorageEnabled, True) QWebSettings.globalSettings().setAttribute(QWebSettings.PrivateBrowsingEnabled, True) QWebSettings.globalSettings().setAttribute(QWebSettings.DeveloperExtrasEnabled, True) # QWebViewによるWebページ表示 browser = QWebView() browser.load(QUrl(url)) browser.setEnabled(True) browser.show() sys.exit(app.exec_())
def _set_proxy(manager, server_url=None): proxy_settings = manager.get_proxy_settings() if proxy_settings.config == 'Manual': if proxy_settings.server and proxy_settings.port: proxy = QNetworkProxy(QNetworkProxy.HttpProxy, hostName=proxy_settings.server, port=int(proxy_settings.port)) if proxy_settings.authenticated: proxy.setPassword(proxy_settings.password) proxy.setUser(proxy_settings.username) QNetworkProxy.setApplicationProxy(proxy) elif proxy_settings.config == 'System': QNetworkProxyFactory.setUseSystemConfiguration(True) elif proxy_settings.config == 'Automatic': proxy_settings = manager.get_proxies(server_url) protocol = server_url.split(":")[0] proxy_server_info = urllib2.urlparse.urlparse( proxy_settings[protocol]) proxy = QNetworkProxy(QNetworkProxy.HttpProxy, hostName=proxy_server_info.hostname, port=proxy_server_info.port) QNetworkProxy.setApplicationProxy(proxy) else: QNetworkProxy.setApplicationProxy( QNetworkProxy(QNetworkProxy.NoProxy))
def mainPyQt4Youtube(): # 必要なモジュールのimport from PyQt4.QtCore import QUrl from PyQt4.QtGui import QApplication from PyQt4.QtWebKit import QWebView, QWebSettings from PyQt4.QtNetwork import QNetworkProxyFactory url = "https://www.youtube.com/?hl=ja&gl=JP" app = QApplication(sys.argv) # Youtube動画を読み込むための設定 QNetworkProxyFactory.setUseSystemConfiguration(True) QWebSettings.globalSettings().setAttribute(QWebSettings.PluginsEnabled, True) QWebSettings.globalSettings().setAttribute(QWebSettings.DnsPrefetchEnabled, True) QWebSettings.globalSettings().setAttribute(QWebSettings.JavascriptEnabled, True) QWebSettings.globalSettings().setAttribute(QWebSettings.OfflineStorageDatabaseEnabled, True) QWebSettings.globalSettings().setAttribute(QWebSettings.AutoLoadImages, True) QWebSettings.globalSettings().setAttribute(QWebSettings.LocalStorageEnabled, True) QWebSettings.globalSettings().setAttribute(QWebSettings.PrivateBrowsingEnabled, True) QWebSettings.globalSettings().setAttribute(QWebSettings.DeveloperExtrasEnabled, True) # QWebViewによるWebページ表示 browser = QWebView() browser.load(QUrl(url)) browser.setEnabled(True) browser.show() sys.exit(app.exec_())
def __init__(self, args, parent=None): QObject.__init__(self, parent) # variable declarations self.m_defaultPageSettings = {} self.m_pages = [] self.m_verbose = args.verbose self.m_page = WebPage(self) self.m_returnValue = 0 self.m_terminated = False # setup the values from args self.m_scriptFile = args.script self.m_args = args.script_args self.m_filesystem = FileSystem(self) self.m_pages.append(self.m_page) do_action('PhantomInitPre') if not args.proxy: QNetworkProxyFactory.setUseSystemConfiguration(True) else: proxy = QNetworkProxy(QNetworkProxy.HttpProxy, args.proxy[0], int(args.proxy[1])) QNetworkProxy.setApplicationProxy(proxy) # Provide WebPage with a non-standard Network Access Manager self.m_netAccessMan = NetworkAccessManager(args.disk_cache, args.ignore_ssl_errors, self) self.m_page.setNetworkAccessManager(self.m_netAccessMan) self.m_page.javaScriptConsoleMessageSent.connect( self.printConsoleMessage) self.m_defaultPageSettings['loadImages'] = args.load_images self.m_defaultPageSettings['loadPlugins'] = args.load_plugins self.m_defaultPageSettings['userAgent'] = self.m_page.userAgent() self.m_defaultPageSettings[ 'localAccessRemote'] = args.local_access_remote self.m_page.applySettings(self.m_defaultPageSettings) self.libraryPath = os.path.dirname(os.path.abspath(self.m_scriptFile)) # inject our properties and slots into javascript self.m_page.mainFrame().addToJavaScriptWindowObject('phantom', self) self.m_page.mainFrame().addToJavaScriptWindowObject( 'fs', self.m_filesystem) bootstrap = QFile(':/bootstrap.js') if not bootstrap.open(QFile.ReadOnly): sys.exit('Can not bootstrap!') bootstrapper = str(bootstrap.readAll()) bootstrap.close() if not bootstrapper: sys.exit('Can not bootstrap!') self.m_page.mainFrame().evaluateJavaScript(bootstrapper) do_action('PhantomInitPost')
def __init__(self, view: Amendment('view/', lambda v: hasattr(v, 'mode') and (v.mode.name == 'web') and (v.widget is None))): #, orig_editor=None): self.view = view QWebView.__init__(self) view.widget = self self.load(QUrl(view.filebuf.file_name)) self.page().setContentEditable(True) QNetworkProxyFactory.setUseSystemConfiguration(True); QWebSettings.globalSettings().setAttribute(QWebSettings.PluginsEnabled, True); QWebSettings.globalSettings().setAttribute(QWebSettings.AutoLoadImages, True);
def __init__(self, parent, args): QObject.__init__(self, parent) # variable declarations self.m_defaultPageSettings = {} self.m_pages = [] self.m_verbose = args.verbose self.m_page = WebPage(self) self.m_returnValue = 0 self.m_terminated = False # setup the values from args self.m_scriptFile = args.script self.m_args = args.script_args self.m_filesystem = FileSystem(self) self.m_pages.append(self.m_page) do_action('PhantomInitPre') if args.proxy is None: QNetworkProxyFactory.setUseSystemConfiguration(True) else: proxy = QNetworkProxy(QNetworkProxy.HttpProxy, args.proxy[0], int(args.proxy[1])) QNetworkProxy.setApplicationProxy(proxy) # Provide WebPage with a non-standard Network Access Manager self.m_netAccessMan = NetworkAccessManager(self, args.disk_cache, args.cookies, args.ignore_ssl_errors) self.m_page.setNetworkAccessManager(self.m_netAccessMan) self.m_page.javaScriptConsoleMessageSent.connect(self.printConsoleMessage) self.m_defaultPageSettings['loadImages'] = args.load_images self.m_defaultPageSettings['loadPlugins'] = args.load_plugins self.m_defaultPageSettings['javascriptEnabled'] = True self.m_defaultPageSettings['XSSAuditingEnabled'] = False self.m_defaultPageSettings['userAgent'] = self.m_page.userAgent() self.m_defaultPageSettings['localAccessRemote'] = args.local_access_remote self.m_page.applySettings(self.m_defaultPageSettings) self.libraryPath = os.path.dirname(os.path.abspath(self.m_scriptFile)) # inject our properties and slots into javascript self.m_page.mainFrame().addToJavaScriptWindowObject('phantom', self) self.m_page.mainFrame().addToJavaScriptWindowObject('fs', self.m_filesystem) bootstrap = QFile(':/bootstrap.js') if not bootstrap.open(QFile.ReadOnly): sys.exit('Can not bootstrap!') bootstrapper = str(bootstrap.readAll()) bootstrap.close() if not bootstrapper: sys.exit('Can not bootstrap!') self.m_page.mainFrame().evaluateJavaScript(bootstrapper) do_action('PhantomInitPost')
def __init__(self, args, parent = None): QObject.__init__(self, parent) # variable declarations self.m_loadStatus = self.m_state = '' self.m_var = self.m_paperSize = self.m_loadScript_cache = {} self.m_verbose = args.verbose self.m_page = WebPage(self) self.m_clipRect = QRect() # setup the values from args self.m_script = args.script.read() self.m_scriptFile = args.script.name self.m_scriptDir = os.path.dirname(args.script.name) if sys.platform.startswith('win'): self.m_scriptDir += '\\' else: self.m_scriptDir += '/' self.m_args = args.script_args self.m_upload_file = args.upload_file autoLoadImages = False if args.load_images == 'no' else True pluginsEnabled = True if args.load_plugins == 'yes' else False args.script.close() palette = self.m_page.palette() palette.setBrush(QPalette.Base, Qt.transparent) self.m_page.setPalette(palette) if not args.proxy: QNetworkProxyFactory.setUseSystemConfiguration(True) else: proxy = QNetworkProxy(QNetworkProxy.HttpProxy, args.proxy[0], int(args.proxy[1])) QNetworkProxy.setApplicationProxy(proxy) self.m_page.settings().setAttribute(QWebSettings.AutoLoadImages, autoLoadImages) self.m_page.settings().setAttribute(QWebSettings.PluginsEnabled, pluginsEnabled) self.m_page.settings().setAttribute(QWebSettings.FrameFlatteningEnabled, True) self.m_page.settings().setAttribute(QWebSettings.OfflineStorageDatabaseEnabled, True) self.m_page.settings().setAttribute(QWebSettings.LocalStorageEnabled, True) self.m_page.settings().setLocalStoragePath(QDesktopServices.storageLocation(QDesktopServices.DataLocation)) self.m_page.settings().setOfflineStoragePath(QDesktopServices.storageLocation(QDesktopServices.DataLocation)) # Ensure we have a document.body. self.m_page.mainFrame().setHtml('<html><body></body></html>') self.m_page.mainFrame().setScrollBarPolicy(Qt.Horizontal, Qt.ScrollBarAlwaysOff) self.m_page.mainFrame().setScrollBarPolicy(Qt.Vertical, Qt.ScrollBarAlwaysOff) if self.m_verbose: m_netAccessMan = NetworkAccessManager(args.disk_cache, self) self.m_page.setNetworkAccessManager(m_netAccessMan) # inject our properties and slots into javascript self.m_page.mainFrame().javaScriptWindowObjectCleared.connect(self.inject) self.m_page.loadFinished.connect(self.finish)
def __init__(self, args, parent = None): QObject.__init__(self, parent) # variable declarations self.m_loadStatus = self.m_state = QString() self.m_var = self.m_paperSize = self.m_loadScript_cache = {} self.m_verbose = args.verbose self.m_page = WebPage(self) self.m_clipRect = QRect() # setup the values from args self.m_script = QString.fromUtf8(args.script[0].read()) self.m_scriptFile = args.script[0].name self.m_args = args.script[1:] self.m_upload_file = args.upload_file autoLoadImages = False if args.load_images == 'no' else True pluginsEnabled = True if args.load_plugins == 'yes' else False args.script[0].close() palette = self.m_page.palette() palette.setBrush(QPalette.Base, Qt.transparent) self.m_page.setPalette(palette) if not args.proxy: QNetworkProxyFactory.setUseSystemConfiguration(True) else: proxy = QNetworkProxy(QNetworkProxy.HttpProxy, args.proxy[0], int(args.proxy[1])) QNetworkProxy.setApplicationProxy(proxy) self.m_page.settings().setAttribute(QWebSettings.AutoLoadImages, autoLoadImages) self.m_page.settings().setAttribute(QWebSettings.PluginsEnabled, pluginsEnabled) self.m_page.settings().setAttribute(QWebSettings.FrameFlatteningEnabled, True) self.m_page.settings().setAttribute(QWebSettings.OfflineStorageDatabaseEnabled, True) self.m_page.settings().setAttribute(QWebSettings.LocalStorageEnabled, True) self.m_page.settings().setLocalStoragePath(QDesktopServices.storageLocation(QDesktopServices.DataLocation)) self.m_page.settings().setOfflineStoragePath(QDesktopServices.storageLocation(QDesktopServices.DataLocation)) # Ensure we have a document.body. self.m_page.mainFrame().setHtml('<html><body></body></html>') self.m_page.mainFrame().setScrollBarPolicy(Qt.Horizontal, Qt.ScrollBarAlwaysOff) self.m_page.mainFrame().setScrollBarPolicy(Qt.Vertical, Qt.ScrollBarAlwaysOff) # if our script was called in a different directory, change to it # to make any dealings with files be relative to the scripts directory if os.path.dirname(self.m_scriptFile): os.chdir(os.path.dirname(self.m_scriptFile)) if self.m_verbose: m_netAccessMan = NetworkAccessManager(self) self.m_page.setNetworkAccessManager(m_netAccessMan) # inject our properties and slots into javascript self.connect(self.m_page.mainFrame(), SIGNAL('javaScriptWindowObjectCleared()'), self.inject) self.connect(self.m_page, SIGNAL('loadFinished(bool)'), self.finish)
def __init__(self, parent, args): super(Phantom, self).__init__(parent) # variable declarations self.m_defaultPageSettings = {} self.m_pages = [] self.m_servers = [] self.m_verbose = args.verbose self.m_page = WebPage(self, args) self.m_returnValue = 0 self.m_terminated = False # setup the values from args self.app_args = args self.m_scriptFile = args.script self.m_args = args.script_args self.m_scriptEncoding = Encode(args.script_encoding, 'utf-8') self.m_outputEncoding = Encode(args.output_encoding, sys.stdout.encoding_sys) self.m_pages.append(self.m_page) do_action('PhantomInitPre') if args.proxy is None: QNetworkProxyFactory.setUseSystemConfiguration(True) else: proxy = QNetworkProxy(args.proxy_type, args.proxy[0], int(args.proxy[1])) QNetworkProxy.setApplicationProxy(proxy) self.m_page.javaScriptConsoleMessageSent.connect( self.printConsoleMessage) self.m_defaultPageSettings['loadImages'] = args.load_images self.m_defaultPageSettings['loadPlugins'] = args.load_plugins self.m_defaultPageSettings['javascriptEnabled'] = True self.m_defaultPageSettings['XSSAuditingEnabled'] = False self.m_defaultPageSettings['userAgent'] = self.m_page.userAgent() self.m_defaultPageSettings[ 'localToRemoteUrlAccessEnabled'] = args.local_to_remote_url_access self.m_page.applySettings(self.m_defaultPageSettings) self.libraryPath = os.path.dirname(os.path.abspath(self.m_scriptFile)) # inject our properties and slots into javascript self.m_page.mainFrame().addToJavaScriptWindowObject('phantom', self) with QPyFile(':/bootstrap.js') as f: self.m_page.mainFrame().evaluateJavaScript(f.readAll()) do_action('PhantomInitPost')
def __init__(self, args, parent = None): QObject.__init__(self, parent) # variable declarations self.m_loadStatus = self.m_state = self.m_userAgent = QString() self.m_page = WebPage(self) self.m_var = self.m_paperSize = self.m_loadScript_cache = {} # setup the values from args self.m_script = QString.fromUtf8(args.script[0].read()) self.m_scriptFile = args.script[0].name self.m_args = args.script[1:] self.m_upload_file = args.upload_file autoLoadImages = False if args.load_images == 'no' else True pluginsEnabled = True if args.load_plugins == 'yes' else False args.script[0].close() palette = self.m_page.palette() palette.setBrush(QPalette.Base, Qt.transparent) self.m_page.setPalette(palette) if not args.proxy: QNetworkProxyFactory.setUseSystemConfiguration(True) else: proxy = QNetworkProxy(QNetworkProxy.HttpProxy, args.proxy[0], int(args.proxy[1])) QNetworkProxy.setApplicationProxy(proxy) self.m_page.settings().setAttribute(QWebSettings.AutoLoadImages, autoLoadImages) self.m_page.settings().setAttribute(QWebSettings.PluginsEnabled, pluginsEnabled) self.m_page.settings().setAttribute(QWebSettings.FrameFlatteningEnabled, True) self.m_page.settings().setAttribute(QWebSettings.OfflineStorageDatabaseEnabled, True) self.m_page.settings().setAttribute(QWebSettings.LocalStorageEnabled, True) self.m_page.settings().setLocalStoragePath(QDesktopServices.storageLocation(QDesktopServices.DataLocation)) self.m_page.settings().setOfflineStoragePath(QDesktopServices.storageLocation(QDesktopServices.DataLocation)) # Ensure we have a document.body. self.m_page.mainFrame().setHtml('<html><body></body></html>') self.m_page.mainFrame().setScrollBarPolicy(Qt.Horizontal, Qt.ScrollBarAlwaysOff) self.m_page.mainFrame().setScrollBarPolicy(Qt.Vertical, Qt.ScrollBarAlwaysOff) # if our script was called in a different directory, change to it # to make any dealings with files be relative to the scripts directory if os.path.dirname(self.m_scriptFile): os.chdir(os.path.dirname(self.m_scriptFile)) # inject our properties and slots into javascript self.setObjectName('phantom') self.connect(self.m_page.mainFrame(), SIGNAL('javaScriptWindowObjectCleared()'), self.inject) self.connect(self.m_page, SIGNAL('loadFinished(bool)'), self.finish)
def _set_proxy(self, manager): proxy_settings = manager.get_proxy_settings() if proxy_settings.config == 'Manual': if proxy_settings.server and proxy_settings.port: proxy = QNetworkProxy(QNetworkProxy.HttpProxy, hostName=proxy_settings.server, port=int(proxy_settings.port)) if proxy_settings.authenticated: proxy.setPassword(proxy_settings.password) proxy.setUser(proxy_settings.username) QNetworkProxy.setApplicationProxy(proxy) elif proxy_settings.config == 'System': QNetworkProxyFactory.setUseSystemConfiguration(True) else: QNetworkProxy.setApplicationProxy(QNetworkProxy(QNetworkProxy.NoProxy))
def __init__(self, args, parent=None): QObject.__init__(self, parent) # variable declarations self.m_defaultPageSettings = {} self.m_verbose = args.verbose self.m_page = WebPage(self) self.m_returnValue = 0 self.m_terminated = False # setup the values from args self.m_script = args.script self.m_scriptFile = args.script_name self.m_args = args.script_args do_action('PhantomInitPre', Bunch(locals())) if not args.proxy: QNetworkProxyFactory.setUseSystemConfiguration(True) else: proxy = QNetworkProxy(QNetworkProxy.HttpProxy, args.proxy[0], int(args.proxy[1])) QNetworkProxy.setApplicationProxy(proxy) # Provide WebPage with a non-standard Network Access Manager self.m_netAccessMan = NetworkAccessManager(args.disk_cache, args.ignore_ssl_errors, self) self.m_page.setNetworkAccessManager(self.m_netAccessMan) self.m_page.javaScriptConsoleMessageSent.connect(self.printConsoleMessage) self.m_defaultPageSettings['loadImages'] = args.load_images self.m_defaultPageSettings['loadPlugins'] = args.load_plugins self.m_defaultPageSettings['userAgent'] = self.m_page.userAgent() self.m_page.applySettings(self.m_defaultPageSettings) # inject our properties and slots into javascript self.m_page.mainFrame().addToJavaScriptWindowObject('phantom', self) bootstrap = QFile(':/bootstrap.js') if not bootstrap.open(QFile.ReadOnly): qCritical('Can not bootstrap!') sys.exit(1) bootstrapper = str(bootstrap.readAll()) bootstrap.close() if not bootstrapper: qCritical('Can not bootstrap!') sys.exit(1) self.m_page.mainFrame().evaluateJavaScript(bootstrapper) do_action('PhantomInitPost', Bunch(locals()))
def queryProxy(self, query): """ Public method to determine a proxy for a given query. @param query reference to the query object (QNetworkProxyQuery) @return list of proxies in order of preference (list of QNetworkProxy) """ if query.queryType() == QNetworkProxyQuery.UrlRequest and \ query.protocolTag() in ["http", "https", "ftp"] and \ Preferences.getUI("UseProxy"): if Preferences.getUI("UseSystemProxy"): proxyList = QNetworkProxyFactory.systemProxyForQuery(query) if sys.platform not in ["darwin", "nt"] and \ len(proxyList) == 1 and \ proxyList[0].type() == QNetworkProxy.NoProxy: # try it the Python way # scan the environment for variables named <scheme>_proxy # scan over whole environment to make this case insensitive for name, value in os.environ.items(): name = name.lower() if value and name[-6:] == '_proxy' and \ name[:-6] == query.protocolTag().toLower(): url = QUrl(value) if url.scheme() in ["http", "https"]: proxyType = QNetworkProxy.HttpProxy else: proxyType = QNetworkProxy.FtpCachingProxy proxy = QNetworkProxy(proxyType, url.host(), url.port(), url.userName(), url.password()) proxyList = [proxy] break if proxyList: proxyList[0].setUser(Preferences.getUI("ProxyUser")) proxyList[0].setPassword(Preferences.getUI("ProxyPassword")) return proxyList else: return [QNetworkProxy(QNetworkProxy.NoProxy)] else: host = Preferences.getUI("ProxyHost") if not host: QMessageBox.critical(None, self.trUtf8("Proxy Configuration Error"), self.trUtf8("""Proxy usage was activated""" """ but no proxy host configured.""")) return [QNetworkProxy(QNetworkProxy.DefaultProxy)] else: pProxyType = Preferences.getUI("ProxyType") if pProxyType == 0: proxyType = QNetworkProxy.HttpProxy elif pProxyType == 1: proxyType = QNetworkProxy.HttpCachingProxy elif pProxyType == 2: proxyType = QNetworkProxy.Socks5Proxy proxy = QNetworkProxy(proxyType, host, Preferences.getUI("ProxyPort"), Preferences.getUI("ProxyUser"), Preferences.getUI("ProxyPassword")) return [proxy, QNetworkProxy(QNetworkProxy.DefaultProxy)] else: return [QNetworkProxy(QNetworkProxy.NoProxy)]
def __init__(self, parent, args): super(Phantom, self).__init__(parent) # variable declarations self.m_defaultPageSettings = {} self.m_pages = [] self.m_verbose = args.verbose self.m_page = WebPage(self, args) self.m_returnValue = 0 self.m_terminated = False # setup the values from args self.app_args = args self.m_scriptFile = args.script self.m_args = args.script_args self.m_scriptEncoding = Encode(args.script_encoding, 'utf-8') self.m_outputEncoding = Encode(args.output_encoding, sys.stdout.encoding_sys) self.m_pages.append(self.m_page) do_action('PhantomInitPre') if args.proxy is None: QNetworkProxyFactory.setUseSystemConfiguration(True) else: proxy = QNetworkProxy(QNetworkProxy.HttpProxy, args.proxy[0], int(args.proxy[1])) QNetworkProxy.setApplicationProxy(proxy) self.m_page.javaScriptConsoleMessageSent.connect(self.printConsoleMessage) self.m_defaultPageSettings['loadImages'] = args.load_images self.m_defaultPageSettings['loadPlugins'] = args.load_plugins self.m_defaultPageSettings['javascriptEnabled'] = True self.m_defaultPageSettings['XSSAuditingEnabled'] = False self.m_defaultPageSettings['userAgent'] = self.m_page.userAgent() self.m_defaultPageSettings['localToRemoteUrlAccessEnabled'] = args.local_to_remote_url_access self.m_page.applySettings(self.m_defaultPageSettings) self.libraryPath = os.path.dirname(os.path.abspath(self.m_scriptFile)) # inject our properties and slots into javascript self.m_page.mainFrame().addToJavaScriptWindowObject('phantom', self) with QPyFile(':/bootstrap.js') as f: bootstrap = str(f.readAll()) self.m_page.mainFrame().evaluateJavaScript(bootstrap) do_action('PhantomInitPost')
def check_proxy_enabled(host, port): """Check if the proxy is enabled.""" port = int(port) if sys.platform.startswith("linux"): settings = gsettings.get_proxy_settings() enabled = len(settings) > 0 if enabled: proxy = build_proxy(settings) QNetworkProxy.setApplicationProxy(proxy) else: logger.info("Proxy is disabled.") return enabled else: QNetworkProxyFactory.setUseSystemConfiguration(True) query = QNetworkProxyQuery(host, port) proxies = QNetworkProxyFactory.systemProxyForQuery(query) return len(proxies) and proxies[0].type() != QNetworkProxy.NoProxy
def setup_proxy(self): """Setup the proxy settings if needed.""" # QtNetwork knows how to use the system settings on both Win and Mac if sys.platform.startswith("linux"): settings = gsettings.get_proxy_settings() enabled = len(settings) > 0 if enabled and WebClient.proxy_instance is None: proxy = build_proxy(settings) self._set_proxy(proxy) WebClient.proxy_instance = proxy elif enabled and WebClient.proxy_instance: logger.info("Proxy already in use.") else: logger.info("Proxy is disabled.") else: if WebClient.proxy_instance is None: logger.info("Querying OS for proxy.") QNetworkProxyFactory.setUseSystemConfiguration(True)
def get_proxy(self, url="http://www.agorabox.org"): try: from PyQt4.QtNetwork import QNetworkProxyQuery, QNetworkProxyFactory from PyQt4.QtCore import QUrl query = QNetworkProxyQuery(QUrl(url)) proxies = QNetworkProxyFactory.systemProxyForQuery(query) if proxies and proxies[0].hostName(): return str(proxies[0].hostName()), proxies[0].port() except: logging.debug("Could not detect proxies")
def _set_proxy(self, manager, server_url=None): proxy_settings = manager.get_proxy_settings() if proxy_settings.config == 'Manual': if proxy_settings.server and proxy_settings.port: proxy = QNetworkProxy(QNetworkProxy.HttpProxy, hostName=proxy_settings.server, port=int(proxy_settings.port)) if proxy_settings.authenticated: proxy.setPassword(proxy_settings.password) proxy.setUser(proxy_settings.username) QNetworkProxy.setApplicationProxy(proxy) elif proxy_settings.config == 'System': QNetworkProxyFactory.setUseSystemConfiguration(True) elif proxy_settings.config == 'Automatic': proxy_settings = manager.get_proxies(server_url) protocol = server_url.split(":")[0] proxy_server_info = urllib2.urlparse.urlparse(proxy_settings[protocol]) proxy = QNetworkProxy(QNetworkProxy.HttpProxy, hostName=proxy_server_info.hostname, port=proxy_server_info.port) QNetworkProxy.setApplicationProxy(proxy) else: QNetworkProxy.setApplicationProxy(QNetworkProxy(QNetworkProxy.NoProxy))
def setup_proxy(self): """Setup the proxy settings if needed.""" # QtNetwork knows how to use the system settings on both Win and Mac if sys.platform.startswith("linux"): settings = gsettings.get_proxy_settings() enabled = len(settings) > 0 if enabled and WebClient.proxy_instance is None: proxy = build_proxy(settings) QNetworkProxy.setApplicationProxy(proxy) WebClient.proxy_instance = proxy elif enabled and WebClient.proxy_instance: logger.info("Proxy already in use.") else: logger.info("Proxy is disabled.") else: if WebClient.proxy_instance is None: logger.info("Querying OS for proxy.") query = QNetworkProxyQuery(QUrl(PROXY_REQUEST)) proxies = QNetworkProxyFactory.systemProxyForQuery(query) QNetworkProxy.setApplicationProxy(proxies[0]) WebClient.proxy_instance = proxies[0]
def initUI(self): self.centralWidget = QtGui.QWidget(self) ''' Address Bar ''' self.addbar = QtGui.QLineEdit(self) self.addbar.setGeometry(200, 16, 840, 35) self.addbar.setStyleSheet("font-size:21px") self.addbar.setFont(QtGui.QFont("Times New Roman")) self.addbar.returnPressed.connect(self.goClicked) self.addbar.cursorPositionAt(QtCore.QPoint(0, 0)) self.addbar.setFocus() self.addbar.setSizePolicy(QtGui.QSizePolicy.MinimumExpanding, True) ''' Progress Bar ''' self.progressbar = QtGui.QProgressBar(self) self.progressbar.setMaximumWidth(100) ''' Web Page Action setting ''' self.web = QWebView(loadProgress=self.progressbar.setValue, loadFinished=self.progressbar.hide, loadStarted=self.progressbar.show, titleChanged=self.setWindowTitle) self.web.setGeometry(300, 100, 1099, 768) self.web.urlChanged.connect(self.goUrlChanged) self.web.page().linkHovered.connect(self.LinkHovered) self.web.loadStarted.connect(self.pageLoadStarted) self.web.loadFinished.connect(self.pageLoadFinished) ''' Back, Forward, Reload and Stop Button ''' self.toolbar = QtGui.QToolBar(self) self.toolbar.addAction(self.web.pageAction(QWebPage.Back)) self.toolbar.addAction(self.web.pageAction(QWebPage.Forward)) self.toolbar.addAction(self.web.pageAction(QWebPage.Reload)) self.toolbar.addAction(self.web.pageAction(QWebPage.Stop)) ''' Global Web Page Setting ''' self.setting = QWebSettings.globalSettings() self.setting.setAttribute(QWebSettings.PluginsEnabled, True) self.setting.setAttribute(QWebSettings.AutoLoadImages, True) self.setting.setAttribute(QWebSettings.JavaEnabled, True) self.setting.setAttribute(QWebSettings.DnsPrefetchEnabled, True) self.setting.setAttribute(QWebSettings.WebGLEnabled, True) self.setting.setAttribute(QWebSettings.LocalStorageEnabled, True) self.setting.setAttribute(QWebSettings.JavascriptEnabled, True) self.setting.setAttribute(QWebSettings.JavascriptCanOpenWindows, True) self.setting.setAttribute( QWebSettings.OfflineWebApplicationCacheEnabled, True) self.setting.setAttribute(QWebSettings.ZoomTextOnly, True) self.setting.setAttribute(QWebSettings.AcceleratedCompositingEnabled, True) self.setting.setAttribute(QWebSettings.SpatialNavigationEnabled, True) self.setting.setAttribute(QWebSettings.LinksIncludedInFocusChain, True) self.setting.setAttribute(QWebSettings.LocalContentCanAccessFileUrls, True) ''' Main Window Setting ''' self.setGeometry(300, 100, 1099, 768) self.setWindowIcon(QtGui.QIcon("")) self.setStyleSheet("background-color:") self.status = self.statusBar() self.status.setSizeGripEnabled(False) self.status.addPermanentWidget(self.progressbar) self.status.hide() self.setCentralWidget(self.centralWidget) grid = QtGui.QGridLayout() grid.addWidget(self.toolbar, 0, 0, 1, 1) grid.addWidget(self.addbar, 0, 1, 1, 1) grid.addWidget(self.web, 2, 0, 1, 6) self.centralWidget.setLayout(grid) ''' Use system Proxy to load page ''' QNetworkProxyFactory.setUseSystemConfiguration(True)
def __init__(self, args, parent=None): QObject.__init__(self, parent) # variable declarations self.m_loadStatus = self.m_state = '' self.m_var = self.m_paperSize = self.m_loadScript_cache = {} self.m_verbose = args.verbose self.m_page = WebPage(self) self.m_clipRect = QRect() # setup the values from args self.m_script = args.script.read() self.m_scriptFile = args.script.name self.m_scriptDir = os.path.dirname(args.script.name) + '/' self.m_args = args.script_args self.m_upload_file = args.upload_file autoLoadImages = False if args.load_images == 'no' else True pluginsEnabled = True if args.load_plugins == 'yes' else False args.script.close() do_action('PhantomInitPre', Bunch(locals())) palette = self.m_page.palette() palette.setBrush(QPalette.Base, Qt.transparent) self.m_page.setPalette(palette) if not args.proxy: QNetworkProxyFactory.setUseSystemConfiguration(True) else: proxy = QNetworkProxy(QNetworkProxy.HttpProxy, args.proxy[0], int(args.proxy[1])) QNetworkProxy.setApplicationProxy(proxy) self.m_page.settings().setAttribute(QWebSettings.AutoLoadImages, autoLoadImages) self.m_page.settings().setAttribute(QWebSettings.PluginsEnabled, pluginsEnabled) self.m_page.settings().setAttribute( QWebSettings.FrameFlatteningEnabled, True) self.m_page.settings().setAttribute( QWebSettings.OfflineStorageDatabaseEnabled, True) self.m_page.settings().setAttribute(QWebSettings.LocalStorageEnabled, True) self.m_page.settings().setLocalStoragePath( QDesktopServices.storageLocation(QDesktopServices.DataLocation)) self.m_page.settings().setOfflineStoragePath( QDesktopServices.storageLocation(QDesktopServices.DataLocation)) # Ensure we have a document.body. self.m_page.mainFrame().setHtml('<html><body></body></html>') self.m_page.mainFrame().setScrollBarPolicy(Qt.Horizontal, Qt.ScrollBarAlwaysOff) self.m_page.mainFrame().setScrollBarPolicy(Qt.Vertical, Qt.ScrollBarAlwaysOff) m_netAccessMan = NetworkAccessManager(args.disk_cache, args.ignore_ssl_errors, self) self.m_page.setNetworkAccessManager(m_netAccessMan) # inject our properties and slots into javascript self.m_page.mainFrame().javaScriptWindowObjectCleared.connect( self.inject) self.m_page.loadFinished.connect(self.finish) do_action('PhantomInitPost', Bunch(locals()))
def initUI(self): self.centralWidget = QtGui.QWidget(self) ''' Address Bar ''' self.addbar = QtGui.QLineEdit(self) self.addbar.setGeometry(200, 16, 840, 35) self.addbar.setStyleSheet("font-size:21px") self.addbar.setFont(QtGui.QFont("Times New Roman")) self.addbar.returnPressed.connect(self.goClicked) self.addbar.cursorPositionAt(QtCore.QPoint(0, 0)) self.addbar.setFocus() self.addbar.setSizePolicy(QtGui.QSizePolicy.MinimumExpanding, True) ''' Progress Bar ''' self.progressbar = QtGui.QProgressBar(self) self.progressbar.setMaximumWidth(100) ''' Web Page Action setting ''' self.web = QWebView(loadProgress=self.progressbar.setValue, loadFinished=self.progressbar.hide, loadStarted= self.progressbar.show, titleChanged=self. setWindowTitle) self.web.setGeometry(300, 100, 1099, 768) self.web.urlChanged.connect(self.goUrlChanged) self.web.page().linkHovered.connect(self.LinkHovered) self.web.loadStarted.connect(self.pageLoadStarted) self.web.loadFinished.connect(self.pageLoadFinished) ''' Back, Forward, Reload and Stop Button ''' self.toolbar = QtGui.QToolBar(self) self.toolbar.addAction(self.web.pageAction(QWebPage.Back)) self.toolbar.addAction(self.web.pageAction(QWebPage.Forward)) self.toolbar.addAction(self.web.pageAction(QWebPage.Reload)) self.toolbar.addAction(self.web.pageAction(QWebPage.Stop)) ''' Global Web Page Setting ''' self.setting = QWebSettings.globalSettings() self.setting.setAttribute(QWebSettings.PluginsEnabled, True) self.setting.setAttribute(QWebSettings.AutoLoadImages, True) self.setting.setAttribute(QWebSettings.JavaEnabled, True) self.setting.setAttribute(QWebSettings.DnsPrefetchEnabled, True) self.setting.setAttribute(QWebSettings.WebGLEnabled, True) self.setting.setAttribute(QWebSettings.LocalStorageEnabled, True) self.setting.setAttribute(QWebSettings.JavascriptEnabled, True) self.setting.setAttribute(QWebSettings.JavascriptCanOpenWindows, True) self.setting.setAttribute(QWebSettings. OfflineWebApplicationCacheEnabled, True) self.setting.setAttribute(QWebSettings.ZoomTextOnly, True) self.setting.setAttribute(QWebSettings.AcceleratedCompositingEnabled, True) self.setting.setAttribute(QWebSettings.SpatialNavigationEnabled, True) self.setting.setAttribute(QWebSettings.LinksIncludedInFocusChain, True) self.setting.setAttribute(QWebSettings.LocalContentCanAccessFileUrls, True) ''' Main Window Setting ''' self.setGeometry(300, 100, 1099, 768) self.setWindowIcon(QtGui.QIcon("")) self.setStyleSheet("background-color:") self.status = self.statusBar() self.status.setSizeGripEnabled(False) self.status.addPermanentWidget(self.progressbar) self.status.hide() self.setCentralWidget(self.centralWidget) grid = QtGui.QGridLayout() grid.addWidget(self.toolbar, 0, 0, 1, 1) grid.addWidget(self.addbar, 0, 1, 1, 1) grid.addWidget(self.web, 2, 0, 1, 6) self.centralWidget.setLayout(grid) ''' Use system Proxy to load page ''' QNetworkProxyFactory.setUseSystemConfiguration(True)
def __init__(self): """ Constructor """ QNetworkProxyFactory.__init__(self)
# TODO: лучше попробовать переписать на селениум, пример: https://github.com/gil9red/SimplePyScripts/blob/59322c5da8ce17ca5c68424b9db5fb82eda5e4dd/selenium__examples/screenshot.py # TODO: сделать также PyQt5 вариант # TODO: проверять поддерживаемые форматы по суффиксу file_name, если формат не поддерживается, # кидать исключение с описание поддерживаемых параметров from PyQt4.QtWebKit import QWebView, QWebPage from PyQt4.QtGui import QApplication, QImage, QPainter from PyQt4.QtCore import QEventLoop, QSize, QUrl from PyQt4.QtNetwork import QNetworkProxyFactory # Чтобы не было проблем запуска компов с прокси QNetworkProxyFactory.setUseSystemConfiguration(True) class WebPage(QWebPage): def userAgentForUrl(self, url): return 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0' qApp = None def url2image(url, file_name=None): """Function at the specified url downloads the page and stores it QImage object and returns it. If you pass file_name, then the function will save the picture in the file. Функция по указанному url загружает страницу и сохраняет ее объект QImage и возвращает его.