2016-10-01 130 views
12

我使用PyQt5來抓取網頁,該網頁適用於http://網址,但完全不適用於https://網址。JavaScript網頁的Python抓取失敗僅適用於https頁面

我的劇本的相關部分低於:

class WebPage(QWebPage): 
    def __init__(self): 
     super(WebPage, self).__init__() 

     self.timerScreen = QTimer() 
     self.timerScreen.setInterval(2000) 
     self.timerScreen.setSingleShot(True) 
     self.timerScreen.timeout.connect(self.handleLoadFinished) 

     self.loadFinished.connect(self.timerScreen.start) 


    def start(self, urls): 
     self._urls = iter(urls) 
     self.fetchNext() 

    def fetchNext(self): 
     try: 
      url = next(self._urls) 
     except StopIteration: 
      return False 
     else: 
      self.mainFrame().load(QUrl(url)) 
     return True 

    def processCurrentPage(self): 
     url = self.mainFrame().url().toString() 
     html = self.mainFrame().toHtml() 

     #Do stuff with html 
     print('loaded: [%d bytes] %s' % (self.bytesReceived(), url)) 

    def handleLoadFinished(self): 
     self.processCurrentPage() 
     if not self.fetchNext(): 
      qApp.quit() 

對於安全網頁,腳本返回一個空白頁。唯一返回的html是<html><head></head><body></body></html>

我有些茫然。是否有一個我缺少的與處理安全URL有關的設置?

+0

你的意思是「對於安全頁面,腳本返回一個空白頁面」? – Adam

+0

啊,是的,我有。謝謝,我應該注意到這一點。 – samg86

+4

@ samg86。我無法重現這一點。請提供一些導致問題的示例安全URL。 – ekhumoro

回答

0

與PyQt4的測試,並常開與HTTPS

import sys 
from PyQt4.QtGui import QApplication 
from PyQt4.QtCore import QUrl 
from PyQt4.QtWebKit import QWebView 

class Browser(QWebView): 
    def __init__(self): 
     QWebView.__init__(self) 
     self.loadFinished.connect(self._result_available) 

    def _result_available(self, ok): 
     frame = self.page().mainFrame() 
     print(frame.toHtml()) 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    view = Browser() 
    view.load(QUrl('https://www.google.com')) 
    app.exec_() 
0

當你的代碼工作正常使用HTTP網頁的網頁,但不使用HTTPS工作,在我看來,這可能是由於SSL的問題。

所以,請仔細檢查您的PyQt5版本具有SSL支持... ...(你可以找到更多的信息相對於下載,安裝和設置的OpenSSL here

所有你需要下載後做SSL庫確保Qt可以找到 這些openSSL庫所在的位置

您使用哪個操作系統? PyQt5是用SSL支持構建的? 安裝Openssl?