mirror of https://github.com/vitalif/phantomjs
Merge branch 'master' of github.com:ariya/phantomjs
commit
e679640700
|
@ -68,6 +68,8 @@ class Phantom(QObject):
|
|||
|
||||
self.m_defaultPageSettings['loadImages'] = args.load_images
|
||||
self.m_defaultPageSettings['loadPlugins'] = args.load_plugins
|
||||
self.m_defaultPageSettings['javascriptEnabled'] = True
|
||||
self.m_defaultPageSettings['XSSAuditing'] = False
|
||||
self.m_defaultPageSettings['userAgent'] = self.m_page.userAgent()
|
||||
self.m_defaultPageSettings['localAccessRemote'] = args.local_access_remote
|
||||
self.m_page.applySettings(self.m_defaultPageSettings)
|
||||
|
|
|
@ -76,7 +76,7 @@ def get(name, depth=3, scope='local'):
|
|||
elif scope == 'builtin':
|
||||
scope = 'f_builtins'
|
||||
|
||||
return getattr(sys._getframe(depth), scope).get(name)
|
||||
return getattr(sys._getframe(depth), scope)[name]
|
||||
|
||||
|
||||
def has_action(hook, func=None):
|
||||
|
|
|
@ -21,9 +21,10 @@ from math import ceil, floor
|
|||
|
||||
from PyQt4.QtCore import (pyqtProperty, pyqtSlot, pyqtSignal, Qt, QObject,
|
||||
QRect, QPoint, QUrl, QFileInfo, QDir, QSize,
|
||||
QSizeF, QByteArray, QEventLoop, QFile)
|
||||
QSizeF, QByteArray, QEventLoop, QEvent, QFile)
|
||||
from PyQt4.QtGui import (QPalette, QDesktopServices, QPrinter, QImage,
|
||||
QPainter, QRegion, QApplication, qRgba)
|
||||
QPainter, QRegion, QApplication, QMouseEvent,
|
||||
qRgba)
|
||||
from PyQt4.QtWebKit import QWebSettings, QWebPage
|
||||
from PyQt4.QtNetwork import QNetworkAccessManager, QNetworkRequest
|
||||
|
||||
|
@ -31,11 +32,6 @@ from plugincontroller import do_action
|
|||
from utils import injectJsInFrame
|
||||
|
||||
|
||||
# Different defaults.
|
||||
# OSX: 72, X11: 75(?), Windows: 96
|
||||
pdf_dpi = 72
|
||||
|
||||
|
||||
class CustomPage(QWebPage):
|
||||
def __init__(self, parent):
|
||||
QWebPage.__init__(self, parent)
|
||||
|
@ -82,6 +78,7 @@ class WebPage(QObject):
|
|||
self.m_paperSize = {}
|
||||
self.m_clipRect = QRect()
|
||||
self.m_libraryPath = ''
|
||||
self.m_mousePos = QPoint()
|
||||
|
||||
self.setObjectName('WebPage')
|
||||
self.m_webPage = CustomPage(self)
|
||||
|
@ -120,6 +117,8 @@ class WebPage(QObject):
|
|||
|
||||
opt.setAttribute(QWebSettings.AutoLoadImages, defaults['loadImages'])
|
||||
opt.setAttribute(QWebSettings.PluginsEnabled, defaults['loadPlugins'])
|
||||
opt.setAttribute(QWebSettings.JavascriptEnabled, defaults['javascriptEnabled'])
|
||||
opt.setAttribute(QWebSettings.XSSAuditingEnabled, defaults['XSSAuditing'])
|
||||
opt.setAttribute(QWebSettings.LocalContentCanAccessRemoteUrls, defaults['localAccessRemote'])
|
||||
if 'userAgent' in defaults:
|
||||
self.m_webPage.m_userAgent = defaults['userAgent']
|
||||
|
@ -177,11 +176,14 @@ class WebPage(QObject):
|
|||
self.m_webPage.setViewportSize(viewportSize)
|
||||
return image
|
||||
|
||||
# Different defaults.
|
||||
# OSX: 72, X11: 75(?), Windows: 96
|
||||
pdf_dpi = 72
|
||||
def renderPdf(self, fileName):
|
||||
p = QPrinter()
|
||||
p.setOutputFormat(QPrinter.PdfFormat)
|
||||
p.setOutputFileName(fileName)
|
||||
p.setResolution(pdf_dpi)
|
||||
p.setResolution(self.pdf_dpi)
|
||||
paperSize = self.m_paperSize
|
||||
|
||||
if not len(paperSize):
|
||||
|
@ -256,8 +258,8 @@ class WebPage(QObject):
|
|||
('mm', 72 / 25.4),
|
||||
('cm', 72 / 2.54),
|
||||
('in', 72.0),
|
||||
('px', 72.0 / pdf_dpi / 2.54),
|
||||
('', 72.0 / pdf_dpi / 2.54)
|
||||
('px', 72.0 / self.pdf_dpi / 2.54),
|
||||
('', 72.0 / self.pdf_dpi / 2.54)
|
||||
)
|
||||
|
||||
for unit, format in units:
|
||||
|
@ -282,6 +284,12 @@ class WebPage(QObject):
|
|||
document.body.appendChild(el);
|
||||
''' % {'scriptUrl': scriptUrl})
|
||||
|
||||
@pyqtSlot(int, int)
|
||||
def click(self, x, y):
|
||||
self.mouseMoveTo(x, y)
|
||||
self.mouseDown()
|
||||
self.mouseUp()
|
||||
|
||||
@pyqtProperty('QVariantMap')
|
||||
def clipRect(self):
|
||||
clipRect = self.m_clipRect
|
||||
|
@ -324,6 +332,25 @@ class WebPage(QObject):
|
|||
def injectJs(self, filePath):
|
||||
return injectJsInFrame(filePath, self.m_libraryPath, self.m_mainFrame)
|
||||
|
||||
@pyqtSlot()
|
||||
def mouseDown(self):
|
||||
event = QMouseEvent(QEvent.MouseButtonPress, self.m_mousePos, Qt.LeftButton, Qt.LeftButton, Qt.NoModifier)
|
||||
QApplication.postEvent(self.m_webPage, event)
|
||||
QApplication.processEvents()
|
||||
|
||||
@pyqtSlot()
|
||||
def mouseUp(self):
|
||||
event = QMouseEvent(QEvent.MouseButtonRelease, self.m_mousePos, Qt.LeftButton, Qt.LeftButton, Qt.NoModifier)
|
||||
QApplication.postEvent(self.m_webPage, event)
|
||||
QApplication.processEvents()
|
||||
|
||||
@pyqtSlot(int, int)
|
||||
def mouseMoveTo(self, x, y):
|
||||
self.m_mousePos = QPoint(x, y)
|
||||
event = QMouseEvent(QEvent.MouseMove, self.m_mousePos, Qt.NoButton, Qt.NoButton, Qt.NoModifier)
|
||||
QApplication.postEvent(self.m_webPage, event)
|
||||
QApplication.processEvents()
|
||||
|
||||
@pyqtSlot(str, str, 'QVariantMap')
|
||||
@pyqtSlot(str, 'QVariantMap', 'QVariantMap')
|
||||
def openUrl(self, address, op, settings):
|
||||
|
|
|
@ -50,6 +50,8 @@
|
|||
|
||||
#define PAGE_SETTINGS_LOAD_IMAGES "loadImages"
|
||||
#define PAGE_SETTINGS_LOAD_PLUGINS "loadPlugins"
|
||||
#define PAGE_SETTINGS_JS_ENABLED "javasriptEnabled"
|
||||
#define PAGE_SETTINGS_XSS_AUDITING "XSSAuditing"
|
||||
#define PAGE_SETTINGS_USER_AGENT "userAgent"
|
||||
#define PAGE_SETTINGS_LOCAL_ACCESS_REMOTE "localAccessRemote"
|
||||
|
||||
|
|
|
@ -178,6 +178,8 @@ Phantom::Phantom(QObject *parent)
|
|||
|
||||
m_defaultPageSettings[PAGE_SETTINGS_LOAD_IMAGES] = QVariant::fromValue(autoLoadImages);
|
||||
m_defaultPageSettings[PAGE_SETTINGS_LOAD_PLUGINS] = QVariant::fromValue(pluginsEnabled);
|
||||
m_defaultPageSettings[PAGE_SETTINGS_JS_ENABLED] = QVariant::fromValue(true);
|
||||
m_defaultPageSettings[PAGE_SETTINGS_XSS_AUDITING] = QVariant::fromValue(false);
|
||||
m_defaultPageSettings[PAGE_SETTINGS_USER_AGENT] = QVariant::fromValue(m_page->userAgent());
|
||||
m_defaultPageSettings[PAGE_SETTINGS_LOCAL_ACCESS_REMOTE] = QVariant::fromValue(localAccessRemote);
|
||||
m_page->applySettings(m_defaultPageSettings);
|
||||
|
|
|
@ -60,6 +60,7 @@ public:
|
|||
, m_webPage(parent)
|
||||
{
|
||||
m_userAgent = QWebPage::userAgentForUrl(QUrl());
|
||||
setForwardUnsupportedContent(true);
|
||||
}
|
||||
|
||||
public slots:
|
||||
|
@ -177,6 +178,8 @@ void WebPage::applySettings(const QVariantMap &def)
|
|||
|
||||
opt->setAttribute(QWebSettings::AutoLoadImages, def[PAGE_SETTINGS_LOAD_IMAGES].toBool());
|
||||
opt->setAttribute(QWebSettings::PluginsEnabled, def[PAGE_SETTINGS_LOAD_PLUGINS].toBool());
|
||||
opt->setAttribute(QWebSettings::JavascriptEnabled, def[PAGE_SETTINGS_JS_ENABLED].toBool());
|
||||
opt->setAttribute(QWebSettings::XSSAuditingEnabled, def[PAGE_SETTINGS_XSS_AUDITING].toBool());
|
||||
opt->setAttribute(QWebSettings::LocalContentCanAccessRemoteUrls, def[PAGE_SETTINGS_LOCAL_ACCESS_REMOTE].toBool());
|
||||
|
||||
if (def.contains(PAGE_SETTINGS_USER_AGENT))
|
||||
|
|
Loading…
Reference in New Issue