PySide의 QtWebKit 모듈을 사용하여 웹 페이지를로드하려고합니다. 그렇지 않은 아아웹 페이지로드
from PySide import QtCore
from PySide import QtGui
from PySide import QtWebKit
# Needed if we want to display the webpage in a widget.
app = QtGui.QApplication([])
view = QtWebKit.QWebView(None)
view.setUrl(QtCore.QUrl("http://www.google.com/"))
frame = view.page().mainFrame()
print(frame.toHtml())
그러나 :; 문서 (Elements of QWebViewQWebFrame::toHtml())에 따르면, 다음 스크립트는 구글 검색 페이지의 HTML을 인쇄해야합니다.
뷰 충분한 데이터가 표시 도착 때까지 동일하게 유지 :
그래서 나는 setUrl documentation에 대해 자세히 살펴했다 : 인쇄되는 모든 널 응답의 방법의 동등 새로운 URL.
<html><head></head><body></body></html>
이렇게하면 서버에서 응답을 받기 전에 너무 빨리 toHtml() 메서드를 호출하고 있다고 생각했습니다. 전혀 차이를하지
import time
class View(QtWebKit.QWebView):
def __init__(self, *args, **kwargs):
super(View, self).__init__(*args, **kwargs)
self.completed = True
self.loadFinished.connect(self.setCompleted)
def setCompleted(self):
self.completed = True
def setUrl(self, url):
self.completed = False
super(View, self).setUrl(url)
while not self.completed:
time.sleep(0.2)
view = View(None)
view.setUrl(QtCore.QUrl("http://www.google.com/"))
frame = view.page().mainFrame()
print(frame.toHtml())
: 그래서 loadFinished 신호가 트리거 될 때까지 블록의 setUrl 방법을 재정의하는 클래스를 썼다. 내가 여기서 무엇을 놓치고 있니?
편집 : 단지 페이지의 HTML을 얻는 것이 나의 최종 게임이 아닙니다. 이것은 내가 예상했던대로 작동하지 않는 코드의 간단한 예입니다.
app.ProcessEvents()는 내가 원했던 것입니다. 감사! – nullstellensatz