mirror of https://github.com/vitalif/phantomjs
Every web page gets its own network access manager.
Network-related activites should not be shared between web page instances. Otherwise, it is extremely confusing when there are two (or more) web pages are active at the same time. http://code.google.com/p/phantomjs/issues/detail?id=1901.3
parent
3eb16093c0
commit
0f6c59cc6e
|
@ -29,7 +29,6 @@ from __init__ import __version_info__
|
|||
from utils import injectJsInFrame, QPyFile
|
||||
from plugincontroller import do_action
|
||||
from webpage import WebPage
|
||||
from networkaccessmanager import NetworkAccessManager
|
||||
from filesystem import FileSystem
|
||||
from encoding import Encode
|
||||
|
||||
|
@ -42,10 +41,11 @@ class Phantom(QObject):
|
|||
self.m_defaultPageSettings = {}
|
||||
self.m_pages = []
|
||||
self.m_verbose = args.verbose
|
||||
self.m_page = WebPage(self)
|
||||
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')
|
||||
|
@ -61,10 +61,6 @@ class Phantom(QObject):
|
|||
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)
|
||||
self.m_page.setNetworkAccessManager(self.m_netAccessMan)
|
||||
|
||||
self.m_page.javaScriptConsoleMessageSent.connect(self.printConsoleMessage)
|
||||
|
||||
self.m_defaultPageSettings['loadImages'] = args.load_images
|
||||
|
@ -112,10 +108,9 @@ class Phantom(QObject):
|
|||
|
||||
@pyqtSlot(result=WebPage)
|
||||
def createWebPage(self):
|
||||
page = WebPage(self)
|
||||
page = WebPage(self, self.app_args)
|
||||
self.m_pages.append(page)
|
||||
page.applySettings(self.m_defaultPageSettings)
|
||||
page.setNetworkAccessManager(self.m_netAccessMan)
|
||||
page.libraryPath = os.path.dirname(os.path.abspath(self.m_scriptFile))
|
||||
return page
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@ from PyQt4.QtWebKit import QWebSettings, QWebPage
|
|||
from PyQt4.QtNetwork import QNetworkAccessManager, QNetworkRequest
|
||||
|
||||
from plugincontroller import do_action
|
||||
from networkaccessmanager import NetworkAccessManager
|
||||
from utils import injectJsInFrame
|
||||
|
||||
|
||||
|
@ -73,7 +74,7 @@ class WebPage(QObject):
|
|||
resourceReceived = pyqtSignal('QVariantMap')
|
||||
resourceRequested = pyqtSignal('QVariantMap')
|
||||
|
||||
def __init__(self, parent):
|
||||
def __init__(self, parent, args):
|
||||
super(WebPage, self).__init__(parent)
|
||||
|
||||
self.m_parent = parent
|
||||
|
@ -113,6 +114,12 @@ class WebPage(QObject):
|
|||
# Ensure we have a document.body.
|
||||
self.m_webPage.mainFrame().setHtml('<html><body></body></html>')
|
||||
|
||||
# Custom network access manager to allow traffic monitoring
|
||||
networkAccessManager = NetworkAccessManager(self, args)
|
||||
self.m_webPage.setNetworkAccessManager(networkAccessManager)
|
||||
networkAccessManager.resourceRequested.connect(self.resourceRequested)
|
||||
networkAccessManager.resourceReceived.connect(self.resourceReceived)
|
||||
|
||||
self.m_webPage.setViewportSize(QSize(400, 300))
|
||||
|
||||
do_action('WebPageInit')
|
||||
|
@ -252,11 +259,6 @@ class WebPage(QObject):
|
|||
self.m_webPage.mainFrame().print_(p)
|
||||
return True
|
||||
|
||||
def setNetworkAccessManager(self, networkAccessManager):
|
||||
self.m_webPage.setNetworkAccessManager(networkAccessManager)
|
||||
networkAccessManager.resourceRequested.connect(self.resourceRequested)
|
||||
networkAccessManager.resourceReceived.connect(self.resourceReceived)
|
||||
|
||||
def stringToPointSize(self, string):
|
||||
units = (
|
||||
('mm', 72 / 25.4),
|
||||
|
|
Loading…
Reference in New Issue