Как заставить Python, QT и Webkit работать на обезглавленном сервере?
У меня есть сервер Debian Linux, который я использую для различных вещей. Я хочу, чтобы он мог делать некоторые веб-скребки, которые мне нужно делать регулярно.
Этот код может быть нашли здесь.
import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from PyQt4.QtWebKit import *
class Render(QWebPage):
def __init__(self, url):
self.app = QApplication(sys.argv, False) # Line updated based on mata's answer
QWebPage.__init__(self)
self.loadFinished.connect(self._loadFinished)
self.mainFrame().load(QUrl(url))
self.app.exec_()
def _loadFinished(self, result):
self.frame = self.mainFrame()
self.app.quit()
Простой тест этого будет выглядеть так:
url = 'http://example.com'
print Render(url).frame.toHtml()
При вызове конструктора он умирает с этим сообщением (оно печатается в stdout, а не в необработанном исключении).
: cannot connect to X server
Как я могу использовать Python (2.7), QT4 и Webkit на обезглавленном сервере? Ничего и никогда не должно быть. отображается, так что я могу настроить любые настройки или все, что нужно настроить.
Я рассматривал альтернативные варианты, но это лучше всего подходит для меня и моих проектов. Если бы мне пришлось установить X-сервер, как бы я мог сделать это с минимальными затратами?4 ответа:
Один из конструкторов
Таким образом, в этом случае единственным вариантом является использование виртуального X-сервера, такого как Xvfb для визуализации графического интерфейса.QApplication
принимает логический аргументGUIenabled
.
Если вы используете это, вы можете создать экземпляр QAppliaction без X-сервера, но вы не можете создать QWidgets.Xvfb можно установить и запустить с помощью этих команд (при условии, что у вас установлен apt-get). Код в исходном вопросе находится в файле под названием
render.py
.sudo apt-get install xvfb xvfb-run python render.py
Если PyQt5 является опцией, Qt 5 имеет" минимальный " плагин платформы.
Чтобы использовать его, измените argv, переданный QApplication, чтобы включить
['-platform', 'minimal']
.
Если все, что вы пытаетесь сделать, это получить веб-страницу, вы можете использовать
import urllib urllib.urlopen('http://example.com').read()
Phantomjs - это решение на основе webkit. бегает и без головы. попробовать ее.
Если вы сами заинтересованы в использовании webkit, вы также можете попробовать версию qt pyslide.