자바 스크립트로 페이지를 다운로드하고 싶습니다. 파이썬을 사용하여 실행했습니다. QT 솔루션 중 하나이며 여기에 코드입니다 :자바 스크립트가 실행 된 다운로드 페이지
class Downloader(QApplication):
__event = threading.Event()
def __init__(self):
QApplication.__init__(self, [])
self.webView = QWebView()
self.webView.loadFinished.connect(self.loadFinished)
def load(self, url):
self.__event.clear()
self.webView.load(QUrl(url))
while not self.__event.wait(.05): self.processEvents()
return self.webView.page().mainFrame().documentElement() if self.__ok else None
def loadFinished(self, ok):
self.__ok = ok
self.__event.set()
downloader = Downloader()
page = downloader.load(url)
문제는 때때로 downloader.load()
실행 자바 스크립트없이 페이지를 반환한다는 것입니다. Downloader.loadStarted()
및 Downloader.loadFinished()
은 한 번만 호출됩니다. 완전한 페이지 다운로드를 기다리는 적절한 방법은 무엇입니까?
편집
def request_ended(reply):
print(reply.error(), reply.url().toString())
을 __init__()
에 self.webView.page().networkAccessManager().finished.connect(request_ended)
를 추가하고 정의하는 경우는 때때로 reply.error()==QNetworkReply.UnknownNetworkError
것으로 나타났다. 이 동작은 신뢰할 수없는 프록시를 사용하는 경우 일부 리소스 (일부는 js 파일)를 다운로드하지 못하기 때문에 작동하지 않습니다. 따라서 일부는 실행되지 않습니다. 프록시가 사용되지 않으면 (== 연결이 안정적), 모든 reply.error()==QNetworkReply.NoError
.
따라서, 업데이트 된 질문은 :
- 는
reply.request()
를 받고 다시 시도하고 그것이self.webView
에 적용 할 수 있습니까?