Bagaimana untuk Mendapatkan Berbilang URL dengan Cekap Menggunakan QWebPage dalam Qt?

DDD
Lepaskan: 2024-10-27 11:42:30
asal
662 orang telah melayarinya

How to Efficiently Retrieve Multiple URLs Using QWebPage in Qt?

Dapatkan Berbilang URL dengan QWebPage

Dalam senario ini, anda telah cuba menggunakan QWebPage Qt untuk memaparkan halaman yang dikemas kini secara dinamik. Walau bagaimanapun, anda sering mengalami ranap sistem apabila cuba memaparkan halaman kedua.

Analisis Masalah

Isunya terletak pada pendekatan anda. Anda memulakan QApplication dan QWebPage baharu untuk setiap pengambilan URL. Sebaliknya, adalah disyorkan untuk mengekalkan satu QApplication dan QWebPage, menggunakan isyarat dan pemprosesan tersuai untuk mengendalikan berbilang URL dalam keadaan yang sama.

Cadangan Penyelesaian

Kelas Halaman Web

Di bawah ialah kelas Halaman Web tersuai untuk kedua-dua PyQt5 dan PyQt4:

Halaman Web PyQt5

<code class="python">from PyQt5.QtCore import pyqtSignal, QUrl
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWebEngineWidgets import QWebEnginePage

class WebPage(QWebEnginePage):
    htmlReady = pyqtSignal(str, str)

    def __init__(self, verbose=False):
        super().__init__()
        self._verbose = verbose
        self.loadFinished.connect(self.handleLoadFinished)

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

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

    def processCurrentPage(self, html):
        self.htmlReady.emit(html, self.url().toString())
        if not self self.fetchNext():
            QApplication.instance().quit()

    def handleLoadFinished(self):
        self.toHtml(self.processCurrentPage)

    def javaScriptConsoleMessage(self, *args, **kwargs):
        if self._verbose:
            super().javaScriptConsoleMessage(*args, **kwargs)</code>
Salin selepas log masuk

Halaman Web PyQt4

Penggunaan
<code class="python">from PyQt4.QtCore import pyqtSignal, QUrl
from PyQt4.QtGui import QApplication
from PyQt4.QtWebKit import QWebPage

class WebPage(QWebPage):
    htmlReady = pyqtSignal(str, str)

    def __init__(self, verbose=False):
        super(WebPage, self).__init__()
        self._verbose = verbose
        self.mainFrame().loadFinished.connect(self.handleLoadFinished)

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

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

    def processCurrentPage(self):
        self.htmlReady.emit(self.mainFrame().toHtml(), self.mainFrame().url().toString())
        if not self.fetchNext():
            QApplication.instance().quit()

    def javaScripConsoleMessage(self ,* args, **kwargs):
        if self._verbose:
            super(WebPage, self).javaScriptConsoleMessage(*args, **kwargs)</code>
Salin selepas log masuk

Berikut ialah contoh cara menggunakan kelas Halaman Web ini:

Dalam kod ini, my_html_processor ialah fungsi yang boleh disesuaikan untuk mengendalikan HTML yang diproses dan Maklumat URL untuk setiap halaman.
<code class="python">from PyQt5.QtCore import QUrl
from PyQt5.QtWidgets import QApplication

# PyQt5
url_list = ['https://example.com', 'https://example2.com']
app = QApplication(sys.argv)
webpage = WebPage(verbose=True)
webpage.htmlReady.connect(my_html_processor)
webpage.process(url_list)
sys.exit(app.exec_())

# PyQt4
from PyQt4.QtCore import QUrl
from PyQt4.QtGui import QApplication
url_list = ['https://example.com', 'https://example2.com']
app = QApplication(sys.argv)
webpage = WebPage(verbose=True)
webpage.htmlReady.connect(my_html_processor)
webpage.process(url_list)
sys.exit(app.exec_())</code>
Salin selepas log masuk

Dengan melaksanakan pendekatan ini, anda boleh menghalang ranap sistem dan gelagat rawak yang anda alami sebelum ini, menghasilkan aliran kerja mengikis web yang lebih stabil dan cekap.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Berbilang URL dengan Cekap Menggunakan QWebPage dalam Qt?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan