Cara Mengelakkan Ranap Apabila Mengikis Berbilang Halaman Web dengan QWebPage Qt
QWebPage Qt boleh memudahkan pemaparan kandungan dinamik, membolehkan tugas mengikis web. Walau bagaimanapun, cubaan untuk memuatkan berbilang halaman selalunya boleh mengakibatkan ranap sistem, terutamanya jika objek QWebPage yang mendasari tidak diurus dengan betul.
Masalah dengan Pemuatan Halaman Berulang
Apabila anda memuatkan halaman berulang kali menggunakan contoh QWebPage yang sama, isu yang tidak dijangka boleh timbul disebabkan oleh pemadaman objek yang tidak betul. Untuk memastikan kestabilan, adalah penting untuk mencipta hanya satu QWebPage dan elakkan daripada membuat berbilang kejadian untuk setiap URL.
Penyelesaian: Mencipta QWebPage Boleh Digunakan Semula
Untuk menangani perkara ini, ubah suai anda kod untuk menggunakan satu objek QWebPage yang boleh mengendalikan berbilang beban URL. Apabila setiap pemuatan selesai, halaman akan mencetuskan gelung dalaman untuk mengambil URL seterusnya. Pendekatan ini menghapuskan keperluan untuk berbilang penciptaan QApplication dan QWebPage, yang boleh menyebabkan ranap sistem.
Kod Contoh Menggunakan QWebPage Yang Diperbaiki
Berikut ialah contoh dikemas kini yang menunjukkan penggunaan QWebPage yang boleh diguna semula:
<code class="python">from PyQt5.QtCore import QUrl, pyqtSignal 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 load_urls(self, urls): self._urls = iter(urls) self.load_next() def load_next(self): try: url = next(self._urls) except StopIteration: return False else: self.load(QUrl(url)) return True def process_current_page(self, html): self.htmlReady.emit(html, self.url().toString()) if not self.load_next(): QApplication.instance().quit() def handleLoadFinished(self): self.toHtml(self.process_current_page) def javaScriptConsoleMessage(self, *args, **kwargs): if self._verbose: super().javaScriptConsoleMessage(*args, **kwargs)</code>
Penggunaan:
<code class="python">import sys from PyQt5.QtWidgets import QApplication app = QApplication(sys.argv) webpage = WebPage(verbose=False) webpage.htmlReady.connect(my_html_processor) urls = ['https://en.wikipedia.org/wiki/Special:Random'] * 3 webpage.load_urls(urls) sys.exit(app.exec_())</code>
Dengan menggunakan pelaksanaan yang dipertingkatkan ini, anda kini boleh mengikis berbilang halaman web dengan pasti tanpa mengalami ranap sistem.
Atas ialah kandungan terperinci Berikut ialah beberapa tajuk berasaskan soalan yang sesuai dengan kandungan artikel anda, memfokuskan pada masalah dan penyelesaian utama: * **Mengapa Mengikis Berbilang Halaman dengan Qt's QWebPage Menyebabkan Ranap?** * **Bagaimana. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!