2011-02-11 4 views
0

Я хочу сохранить содержимое страницы в изображение, когда она полностью загружена, но иногда я получаю выходной растровый вывод не полностью.PyQt wait, пока страница не загрузилась

Код:

import sys 
import signal 
import os 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 
from PyQt4.QtWebKit import QWebPage 

app = QApplication(sys.argv) 
signal.signal(signal.SIGINT, signal.SIG_DFL) 
webpage = QWebPage() 
def onLoadFinished(result): 
    if not result: 
     print "Request failed" 
     sys.exit(1) 
    webpage.setViewportSize(webpage.mainFrame().contentsSize()) 
    image = QImage(webpage.viewportSize(), QImage.Format_ARGB32) 
    painter = QPainter(image) 
    webpage.mainFrame().render(painter) 
    painter.end() 
    if os.path.exists("output.png"): 
     os.remove("output.png") 
    image.save("output.png") 
    sys.exit(0) # quit this application 

webpage.mainFrame().load(QUrl("file:///page.html")) 
webpage.connect(webpage, SIGNAL("loadFinished(bool)"), onLoadFinished) 
sys.exit(app.exec_()) 

Страница использует JavaScript (OnLoad функция), чтобы получить карту Google (640x640px).

Изображение: http://i56.tinypic.com/15ojg3s.png

+1

связаны: [Как узнать, когда веб-страница загружается при использовании QtWebKit?] (Http://stackoverflow.com/questions/1302874/) –

ответ

1

Я не уверен, если это вообще возможно. Для статического веб-сайта это, вероятно, может работать, но Карты Google будут загружать плитки динамически, и я сомневаюсь, что это испустит приемлемый сигнал «Я сделан».

Но, похоже, вам нужен только образ карты Google? Вы посмотрели их API? Они позволяют вам generate static maps, просто создав URL-адрес.

Пример

http://maps.google.com/maps/api/staticmap?center=Brooklyn+Bridge,New+York,NY&zoom=14&size=512x512&maptype=roadmap &markers=color:blue|label:S|40.702147,-74.015794&markers=color:green|label:G|40.711614,-74.&markers=color:red|color:red|label:C|40.718217,-73.998284&sensor=false 

Example map

+0

К сожалению статическими карты не подходят для того, чего я пытаюсь достичь - я пробовал это. Вероятно, я постараюсь с этим: http://openlayers.org/dev/examples/layerLoadMonitoring.html. Благодарю за помощь в любом случае –