pyqt5 QWebEngineView如何获取网页源代码

  • A+
所属分类:编程语言

使用pyqt5的QWebEngineView视图组件可以打开网址(或加载本地的html网页),加载网页后可以通过运行javascript代码获取网页源代码或者通过toHtml函数来获取网页源代码。下面就展示了如何通过toHtml函数获取源代码。

首先创建一个垂直布局,一个QWebEngineView组件和一个QPushButton组件,并将两个组件添加到垂直布局中,同时将layout垂直布局设置给self窗口。

其次,然后通过load方法加载百度地图,然后给button按钮添加一个点击的槽函数add_script。

最后,在槽函数里面实现打印源代码的功能,主要使用到的是 self.web_browser.page().toHtml函数,因为该函数需要一个函数作为其参数,同时会将网页源代码传递出去,于是给其中传递了一个匿名函数lambda,并打印了参数x 即是toHtml传递出去的源代码。这样就实现了获取网页源代码的功能,toHtml有点类似一个信号。

在实现过程中可以进行优化调整,如给self.web_browser.loadFinished信号绑定一个自己定义的槽函数,当网页加载完成后再实现获取网页源代码。槽函数里面可以任意处理,如通过实例变量接受,或者保存为本地网页,或者进一步的解析网页源代码,获取指定的元素或文本内容。

另外,QWebEngineView也有执行javascript的功能runJavaScript函数,可以将其当成selenium来进行自动化操作。

  1. import sys
  2. from PyQt5.Qt import *
  3. class MainWindow(QWidget):
  4.     def __init__(self):
  5.         super(MainWindow, self).__init__()
  6.         self.setupUI()
  7.     def setupUI(self):
  8.         layout = QVBoxLayout()
  9.         self.web_browser = QWebEngineView()
  10.         # self.web_browser.load(QUrl('https://pan.baidu.com/s/17XlMuMzfQhwJ5R1Bn7yuiA#list/path=%2F'))
  11.         btn = QPushButton('加载脚本')
  12.         layout.addWidget(btn)
  13.         layout.addWidget(self.web_browser)
  14.         self.setLayout(layout)
  15.         self.web_browser.load(QUrl('https://map.baidu.com'))
  16.         btn.clicked.connect(self.add_script)
  17.         # self.web_browser.loadFinished.connect(self.add_script)
  18.     def add_script(self):
  19.         print('按钮已被点击')
  20.         # self.web_browser.page().toPlainText(lambda x: print(x))
  21.         self.web_browser.page().toHtml(lambda x: print(x))
  22.         # self.web_browser.page().runJavaScript('''function getname(){
  23.         # var elem = document.getElementById("user-center");
  24.         # elem.remove();
  25.         # var elem2 = document.getElementById("message-center");
  26.         # elem2.remove();
  27.         # var elem3 = document.querySelector('.BMap_cpyCtrl');
  28.         # elem3.remove();
  29.         # var elem4 = document.querySelector('.BMap_scaleCtrl');
  30.         # elem4.remove();
  31.         # var elem5 = document.querySelector('#newuilogo');
  32.         # elem5.remove();};
  33.         # getname();
  34.         # ''')
  35. if __name__ == '__main__':
  36.     app = QApplication(sys.argv)
  37.     window = MainWindow()
  38.     window.show()
  39.     sys.exit(app.exec_())

注意要点

weinxin
我的微信公众号
爱真理,得永生!          爱在灵灵久博客,网罗天下,福利大家!

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: