Я занимаюсь учебным пособием PyQt4 от Sentdex right here. Я пытаюсь следовать, но вместо этого используйте PyQt5. Это простое приложение для очистки веб-страниц. Я следовал вместе с обучающей Sentdex, и я получил здесь:PyQt4 to PyQt5 -> mainFrame() устарел, нужно исправить загрузку веб-страниц
Сейчас я пытаюсь написать то же самое приложение с PyQt5 и это то, что у меня есть:
import os
import sys
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QUrl, QEventLoop
from PyQt5.QtWebEngineWidgets import QWebEnginePage
from bs4 import BeautifulSoup
import requests
class Client(QWebEnginePage):
def __init__(self, url):
self.app = QApplication(sys.argv)
QWebEnginePage.__init__(self)
self.loadFinished.connect(self._loadFinished)
self.load(QUrl(url))
self.app.exec_()
def _loadFinished(self):
self.app.quit()
url = 'https://pythonprogramming.net/parsememcparseface/'
client_response = Client(url)
#I think the issue is here at LINE 26
source = client_response.mainFrame().toHtml()
soup = BeautifulSoup(source, "html.parser")
js_test = soup.find('p', class_='jstest')
print(js_test.text)
Когда я запускаю это , я получаю сообщение:
source = client_response.mainFrame().toHtml() AttributeError: 'Client' object has no attribute 'mainFrame'
Я пытался несколько различных решений, но никто не работает. Любая помощь будет оценена по достоинству.
EDIT
Вход QUrl (URL) в строке 15 возвращает это значение:
PyQt5.QtCore.QUrl('https://pythonprogramming.net/parsememcparseface/')
Когда я пытаюсь source = client_response.load(QUrl(url))
для линии 26, я в конечном итоге с сообщением :
File "test3.py", line 28, in <module> soup = BeautifulSoup(source, "html.parser") File "/Users/MYNAME/.venv/qtproject/lib/python3.6/site-packages/bs4/__init__.py", line 192, in __init__ elif len(markup) <= 256 and ( TypeError: object of type 'NoneType' has no len()
Когда я пытаюсь source = client_response.url()
я получаю:
soup = BeautifulSoup(source, "html.parser") File "/Users/MYNAME/.venv/qtproject/lib/python3.6/site-packages/bs4/__init__.py", line 192, in __init__ elif len(markup) <= 256 and ( TypeError: object of type 'QUrl' has no len()
Похоже MainFrame() является самостоятельным описываемый метод в 'класса Client (QWebEnginePage)', потому что не существует в классе в соответствии с [Qt5 документации] (HTTP: //doc.qt .io/QT-5/qwebenginepage.html). Вы уверены, что в учебнике отсутствует больше? – NineTails
mainFrame() был методом в PyQt4 с QWebPage: http://doc.qt.io/qt-5/qtwebenginewidgets-qtwebkitportingguide.html –
Не зная о webkit, кажется, что mainFrame() был поглощен другими функциями , где вместо этого вы указываете, является ли кадр основным или дочерним фреймом, используя индикатор bool. Например, 'acceptNavigationRequest (const QUrl & url, Тип NavigationType, bool isMainFrame)'. – NineTails