乐趣区

关于python:pyqt5-QWebEngineView如何获取网页源代码

应用 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 来进行自动化操作。

import sys
from PyQt5.Qt import *
class MainWindow(QWidget):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setupUI()
    def setupUI(self):
        layout = QVBoxLayout()
        self.web_browser = QWebEngineView()
        # self.web_browser.load(QUrl('https://pan.baidu.com/s/17XlMuMzfQhwJ5R1Bn7yuiA#list/path=%2F'))
        btn = QPushButton('加载脚本')
        layout.addWidget(btn)
        layout.addWidget(self.web_browser)
        self.setLayout(layout)
        self.web_browser.load(QUrl('https://map.baidu.com'))
        btn.clicked.connect(self.add_script)
        # self.web_browser.loadFinished.connect(self.add_script)
    def add_script(self):
        print('按钮已被点击')
        # self.web_browser.page().toPlainText(lambda x: print(x))
        self.web_browser.page().toHtml(lambda x: print(x))
        # self.web_browser.page().runJavaScript('''function getname(){# var elem = document.getElementById("user-center");
        # elem.remove();
        # var elem2 = document.getElementById("message-center");
        # elem2.remove();
        # var elem3 = document.querySelector('.BMap_cpyCtrl');
        # elem3.remove();
        # var elem4 = document.querySelector('.BMap_scaleCtrl');
        # elem4.remove();
        # var elem5 = document.querySelector('#newuilogo');
        # elem5.remove();};
        # getname();
        # ''')
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())
退出移动版