首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NameError:未定义名称“QWebPage”

NameError:未定义名称“QWebPage”
EN

Stack Overflow用户
提问于 2017-01-20 01:47:36
回答 2查看 5.7K关注 0票数 1

我是Python新手,我试图理解为什么我会遇到以下错误:

代码语言:javascript
复制
Traceback (most recent call last):
File "WebScraper.py", line 10, in <module>
    class Render(QWebPage):  
NameError: name 'QWebPage' is not defined

以下是代码:

代码语言:javascript
复制
import sys  
from PyQt5.QtGui import *  
from PyQt5.QtCore import *  
from PyQt5.QtWebEngineWidgets import *  
from lxml import html 

#Take this class for granted.Just use result of rendering.
class Render(QWebPage):  
  def __init__(self, url):  
    self.app = QApplication(sys.argv)  
    QWebPage.__init__(self)  
    self.loadFinished.connect(self._loadFinished)  
    self.mainFrame().load(QUrl(url))  
    self.app.exec_()  

  def _loadFinished(self, result):  
    self.frame = self.mainFrame()  
    self.app.quit()  

url = 'http://pycoders.com/archive/'  
r = Render(url)  
result = r.frame.toHtml()
#This step is important.Converting QString to Ascii for lxml to process
archive_links = html.fromstring(str(result.toAscii()))
print(archive_links)

我理解__init__充当构造函数,但为什么不将其设置为self?所以我需要把它改成像QWebPage.x = self这样的东西

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-20 01:52:42

你不能进口QWebPage

尝试将此导入添加到脚本的顶部:

代码语言:javascript
复制
from PyQt5.QtWebKitWidgets import QWebPage
票数 1
EN

Stack Overflow用户

发布于 2017-07-29 23:51:17

您使用的是什么版本的PyQt5?请注意,启动PyQt5.9、QtWebKitWidgets (以及QtWebKit)将不再可用(不推荐),从而导致您正在获得的错误。

让我并列两个呈现函数,一个使用旧的(PyQt4),另一个使用最新的PyQt5:

使用PyQt4,注意QWebPage的用法,当然还有导入

代码语言:javascript
复制
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *

class Render(QWebPage):
    """Render HTML with PyQt4 WebEngine."""  
    def __init__(self, url):  
        self.app = QApplication(sys.argv)  
        QWebPage.__init__(self)  
        self.loadFinished.connect(self._loadFinished)  
        self.mainFrame().load(QUrl(url))  
        self.app.exec_()  

    def _loadFinished(self, result):  
        self.frame = self.mainFrame()  
        self.app.quit()

使用PyQt5时,注意使用QWebPage而不是QWebPage,当然还有导入

代码语言:javascript
复制
 from PyQt5.QtCore import QEventLoop
 from PyQt5.QtWebEngineWidgets import QWebEngineView
 from PyQt5.QtWidgets import QApplication

    class Render(QWebEngineView):
        """Render HTML with PyQt5 WebEngine."""

        def __init__(self, html):
            self.html = None
            self.app = QApplication(sys.argv)
            QWebEngineView.__init__(self)
            self.loadFinished.connect(self._loadFinished)
            self.setHtml(html)
            while self.html is None:
                self.app.processEvents(
                    QEventLoop.ExcludeUserInputEvents |
                    QEventLoop.ExcludeSocketNotifiers |
                    QEventLoop.WaitForMoreEvents)
            self.app.quit()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41754786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档