利用 python 的各种开源工具自制浏览器
2019獨角獸企業重金招聘Python工程師標準>>>
0.導言
很多時候,我們有這樣的需求:想利用現在先進的HTML5和JS技術,又不想走B/S架構,想弄出個像客戶端一樣的瀏覽器外殼。本文要解決的就是這個問題,我們利用 python 環境下所提供的各種工具,編譯生成一個高度可用的制作瀏覽器。
1.準備工作
這里說一下自制瀏覽器所需要的環境與軟件。
windows操作系統:因為我最后要生成一個exe文件,所以操作系統環境直接利用了windows。
python2.7 :我利用的是python2.7的環境,這是我覺得目前用的最順手的一個環境,注:雖然我的系統是64位的,但這里安裝的python環境是32位的,因為考慮到做出來的瀏覽器的兼容性,還是用32位的環境。
PyQt4 :Qt 是一款GUI應用程序的開發框架,因為我們既然要做瀏覽器,圖形界面是免不了的,PyQt4是Qt在python環境下的一個實現,而且這個包中還包含了webkit瀏覽器內核,非常好用。官方網站:http://www.riverbankcomputing.co.uk/news
PyInstaller : 這是一個可以把python程序轉換成exe可執行程序的 python 包,也很好用。官方網址:http://www.pyinstaller.org/?
pywin32 : 這是 PyInstaller 需要依賴的一個包。下載地址:http://sourceforge.net/projects/pywin32/
UPX : 這是一款先進的可執行程序文件壓縮器,若不安裝它,運行 pyinstaller.py 會報錯。下載地址:http://sourceforge.net/projects/upx/??;下載完之后放在 PyInstaller中與pyinstaller.py的相同目錄下。
VerySimpleWebBrowser.py:這是一個老外用 python 寫的簡單的瀏覽器的源碼,我數了一下,總共的實際代碼只有43行,如果你電腦已經安裝了python 和 pyqt4 , 你已經可以用python環境運行它: pyhon?VerySimpleWebBrowser 。下載地址:?http://www.binpress.com/app/verysimplewebbrowser/279?
好了,需要的東西就這么多,其實都是組裝別人的東西,我沒有自己寫一行代碼。
3.制作過程
安裝 python 環境
這步就不說了~
安裝 PyQt?
這步也是一頓下一步~沒什么說的
安裝 pywin32
也是一頓下一步~
安裝 pyinstaller
這個東西下載的是源碼,我先 python setup.py install 了一下,其實我也不太清楚這步有沒有必要,因為最后還是要到它的文件夾下利用 pyinstaller.py這個文件。
安裝 UPX
這步其實就是像我上面說的,把下載后的文件 copy 到 PyInstaller的文件目錄下,(放在和 pyinstaller.py 同 一個目錄)
打包?VerySimpleWebBrowser.py
將 VerySimpleWebBrowser.py 也 copy 到 pyinstaller.py 的同目錄下。在命令行下切換到此目錄,運行 :
如果沒有問題的話,現在已經生成了?VerySimpleWebBrowser.exe,這里有兩個選項, -F 表示將所有文件都打包到 exe 中, -w 表示用窗口顯示。
最終的結果如下:
稍微包裝一下之后就可以作為展現js的本地客戶端使用(圖可以動哦~):
3.總結
整個過程其實就是個拼裝過程,只要細心些就可以了~ 大家感受一下 python 的強大與便捷吧!
4.附錄
最后我把?VerySimpleWebBrowser.py 的源代碼貼出來吧~讓大家看看它是有多么簡單!
"""*********************?VerySimpleWebBrowser?************************This?is?a?Very?Simple?Web?Browser?implemented?over?Qt?and?QtWebKit.More?info?on:?https://codescience.wordpress.com/author:?Juan?Manuel?Garcia?<jmg.utn@gmail.com>******************************************************************* """import?sys from?PyQt4?import?QtCore,?QtGui,?QtWebKitclass?Browser(QtGui.QMainWindow):def?__init__(self):"""Initialize?the?browser?GUI?and?connect?the?events"""QtGui.QMainWindow.__init__(self)self.resize(800,600)self.centralwidget?=?QtGui.QWidget(self)self.mainLayout?=?QtGui.QHBoxLayout(self.centralwidget)self.mainLayout.setSpacing(0)self.mainLayout.setMargin(1)self.frame?=?QtGui.QFrame(self.centralwidget)self.gridLayout?=?QtGui.QVBoxLayout(self.frame)self.gridLayout.setMargin(0)self.gridLayout.setSpacing(0)self.horizontalLayout?=?QtGui.QHBoxLayout()self.tb_url?=?QtGui.QLineEdit(self.frame)self.bt_back?=?QtGui.QPushButton(self.frame)self.bt_ahead?=?QtGui.QPushButton(self.frame)self.bt_back.setIcon(QtGui.QIcon().fromTheme("go-previous"))self.bt_ahead.setIcon(QtGui.QIcon().fromTheme("go-next"))self.horizontalLayout.addWidget(self.bt_back)self.horizontalLayout.addWidget(self.bt_ahead)self.horizontalLayout.addWidget(self.tb_url)self.gridLayout.addLayout(self.horizontalLayout)self.html?=?QtWebKit.QWebView()self.gridLayout.addWidget(self.html)self.mainLayout.addWidget(self.frame)self.setCentralWidget(self.centralwidget)self.connect(self.tb_url,?QtCore.SIGNAL("returnPressed()"),?self.browse)self.connect(self.bt_back,?QtCore.SIGNAL("clicked()"),?self.html.back)self.connect(self.bt_ahead,?QtCore.SIGNAL("clicked()"),?self.html.forward)self.connect(self.html,?QtCore.SIGNAL("urlChanged(const?QUrl)"),?self.url_changed)self.default_url?=?"http://codescience.wordpress.com/"self.tb_url.setText(self.default_url)self.browse()def?browse(self):"""Make?a?web?browse?on?a?specific?url?and?show?the?page?on?theWebview?widget."""url?=?self.tb_url.text()?if?self.tb_url.text()?else?self.default_urlself.html.load(QtCore.QUrl(url))self.html.show()def?url_changed(self,?url):"""Triggered?when?the?url?is?changed"""self.tb_url.setText(url.toString())if?__name__?==?"__main__":app?=?QtGui.QApplication(sys.argv)main?=?Browser()main.show()sys.exit(app.exec_())轉載于:https://my.oschina.net/mayepythoner/blog/298503
總結
以上是生活随笔為你收集整理的利用 python 的各种开源工具自制浏览器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mongodb学习(六)索引
- 下一篇: ClassLoader 初步