应用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 sysfrom 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_())