2016-05-04 14 views
1

pythonでpyQtを使用し、Webブラウザとテーブルを使用してブラウザリクエストでヘッダを表示するアプリケーションを開発しました。ここ は私のコードです: -Q pyQt Pythonのネットワークアクセスマネージャ

import sys 
from PyQt4.QtGui import QApplication, QTableWidget, QTableWidgetItem 
from PyQt4.QtCore import QUrl 
from PyQt4.QtWebKit import QWebView, QWebPage 
from PyQt4.QtGui import QGridLayout, QLineEdit, QWidget, QHeaderView 
from PyQt4.QtNetwork import QNetworkAccessManager, QNetworkRequest 


class RequestsTable(QTableWidget): 
    header = ["url", "status", "content-type","cookies","user_agent"] 

    def __init__(self): 
     super(RequestsTable, self).__init__() 
     self.setColumnCount(5) 
     self.setHorizontalHeaderLabels(self.header) 
     header = self.horizontalHeader() 
     header.setStretchLastSection(True) 

    def update(self, data): 
     last_row = self.rowCount() 
     next_row = last_row + 1 
     self.setRowCount(next_row) 
     for col, dat in enumerate(data, 0): 
      if not dat: 
       continue 
      self.setItem(last_row, col, QTableWidgetItem(dat)) 

class Manager(QNetworkAccessManager): 
    def __init__(self, table): 
     QNetworkAccessManager.__init__(self) 
     self.finished.connect(self._finished) 
     self.table = table 

    def _finished(self, reply): 
     user_agent = str(reply.request().rawHeader("User-Agent")) 
     headers = reply.rawHeaderPairs() 
     headers = {str(k):str(v) for k,v in headers} 
     content_type = headers.get("Content-Type") 
     url = reply.url().toString() 
     status = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute) 
     status, ok = status.toInt() 
     cookies = headers.get("Set-Cookie") 
     self.table.update([url, str(status),    content_type,cookies,user_agent]) 


if __name__ == "__main__": 
    app = QApplication(sys.argv) 

    grid = QGridLayout() 
    browser = QWebView() 
    browser.load(QUrl("http://www.indiatimes.com/")) 
    def on_html_available(): 
     page = QWebPage() 
     page.setNetworkAccessManager(manager) 

     # problem is here 
     browser.setPage(page) 
     # if i dont use above line then it don't show any error but the headers don't get append in the table but if i use the above line it shows me the error segmentation fault 

    browser.loadFinished.connect(on_html_available) 
    requests_table = RequestsTable() 
    manager = Manager(requests_table) 
    grid.addWidget(browser, 3, 0) 
    grid.addWidget(requests_table, 4, 0) 
    main_frame = QWidget() 
    main_frame.setLayout(grid) 
    main_frame.show() 
    sys.exit(app.exec_()) 

が、上記のコードは問題であるかもしれないもの

"core dumped segmentation fault"? 

私にエラーを示していますか?この問題を解決する際に私を助けてください。

答えて

1

ブラウザのページをhtmlに設定しなおしてしまったため、これは間違っています。ネットワークアクセスマネージャにアクセスするには、最初にマネージャを取り、次にマネージャページを設定してブラウザページを設定する必要があります。あなたがこれを取得しない場合私に知らせてください。

+0

ありがとう –