2016-10-01 78 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?