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.制作过程

  1. 安装 python 环境

    这步就不说了~

  2. 安装 PyQt 

    这步也是一顿下一步~没什么说的

  3. 安装 pywin32

    也是一顿下一步~

  4. 安装 pyinstaller

    这个东西下载的是源码,我先 python setup.py install 了一下,其实我也不太清楚这步有没有必要,因为最后还是要到它的文件夹下利用 pyinstaller.py这个文件。

  5. 安装 UPX

    这步其实就是像我上面说的,把下载后的文件 copy 到 PyInstaller的文件目录下,(放在和 pyinstaller.py 同 一个目录)

  6. 打包 VerySimpleWebBrowser.py

    将 VerySimpleWebBrowser.py 也 copy 到 pyinstaller.py 的同目录下。在命令行下切换到此目录,运行 :

python pyinstaller.py -F -w VerySimpleWebBrowser.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 的各种开源工具自制浏览器相关推荐

  1. python制作软件excel_利用Python制作一个 截图+Excel操作浏览器小工具

    代码如下: GetData.py import xlrd class ReadExcel(): def __init__(self,file): self.open_excel = xlrd.open ...

  2. python制作小工具_利用Python制作翻译小工具

    话不多说,直接上代码. Component文件: # coding:utf-8 from tkinter import * from tkinter import ttk from tkinter i ...

  3. python制作软件excel,利用Python制作Excel对比工具

    目前功能还不完善,只能对比第一个sheet的内容,代码如下: # -*- coding: utf-8 -*- # 博客园 C丶小明 import xlrd,time from docx import ...

  4. 求助:利用Python制作Excel对比工具

    需求:excel的内容是关于人员的项目成绩信息.每个excel中的项目成绩格式一致,人数可能不一致.选择任意两个excel文件,通过A列的姓名,匹配预设规则1或2,比较每个人在两个excel中各个项目 ...

  5. iframe 自动登录_安阳联通利用python实现三集中未反馈工单自动提取

    安阳联通讯(云网运营中心:刘红民.徐路法)安阳联通逻辑团队自主研发的<三集中未反馈工单自动提取>项目经过三个多月的上线运行取得了成效,三集中考核指标"销障及时率"安阳已 ...

  6. 《财富》500 强企业要求 curl 开源工具作者提供免费及时的支持;基于Chromium的Edge浏览器正在整合文本预测功能 | 开源日报

    整理 | 宋彤彤 责编 | 屠敏 开源吞噬世界的趋势下,借助开源软件,基于开源协议,任何人都可以得到项目的源代码,加以学习.修改,甚至是重新分发.关注「开源日报」,一文速览国内外今日的开源大事件吧! ...

  7. python推箱子小游戏_小伙利用Python自制一个推箱子小游戏!

    原标题:小伙利用Python自制一个推箱子小游戏! 导语 月初更波python制作小游戏系列吧用python写了个推箱子小游戏,在这里分享给大家,让我们愉快地开始吧 小伙利用Python自制一个推箱子 ...

  8. 自制开源的安卓浏览器

    开源的安卓浏览器 自制开源的安卓浏览器 一,Via浏览器,总分:21 二,Ninja浏览器,总分:28 三,168浏览器,总分:29 自制开源的安卓浏览器 当今各种广告和自媒体无聊信息充斥网络,大量的 ...

  9. 干货 | 《利用Python进行数据分析》资料开源下载

    今天要跟大家分享的是数据分析领域的必备书籍之一的<利用Python进行数据分析>第二版.英文名为 Python for Data Analysis. 本书作者Wes McKinney 资深 ...

最新文章

  1. mybaits二十八:逆向工程
  2. linux03-用户与组
  3. Pandas简明教程:四、Pandas数据索引方式
  4. 真实HDFS集群启动后master的jps没有DataNode
  5. 阅读react-redux源码(五) - connectAdvanced中store改变的事件转发、ref的处理和pure模式的处理
  6. java大神请出来_求java大神,请分析以下代码,写出执行结果,并解释每行结果输出的原因。...
  7. 【计算机就业-银行】校招想去银行该怎么准备
  8. Redmi Note 10配备NFC 3.0功能:首次支持封闭式门卡
  9. vue 绑定 class 和 内联样式(style)
  10. ECharts实战教程
  11. 基于jsp+mysql+Spring+SpringMVC+mybatis的ssm乐轩公司订餐系统
  12. PHP开源公司订餐系统Food Online System Version1.6
  13. linux系统etc什么意思,etc.是什么意思 linux下的etc是什么意思
  14. 用shapely判断两个图形的包含相交关系
  15. openoffice java linux 安装_linux环境下安装 openOffice 并启动服务 的方法
  16. transform.position 绝对位置与相对位置
  17. Unity DOTS 介绍
  18. 贝叶斯决策理论(三):最小最大决策、序贯分类
  19. led驱动电源初学者必看_初学者:如何在Windows 8中查看Metro应用程序的已用驱动器空间...
  20. 这个应该狠狠打击了,淘宝拟禁止好评返现引导买家刷好评

热门文章

  1. python课堂笔记手抄图片_超简单又漂亮的手抄报图片
  2. 微信小程序-canvas绘制文字实现自动换行
  3. matlab训练神经网络模型并导入simulink详细步骤
  4. vscode如何找letax模板_一直努力却找不到变美思路?韩国新一代「整容模板」,教你如何提高美商、科学变美!...
  5. 安装python3.8.0步骤_python3.8.0安装教程_后端开发
  6. php内核函数手册,深入理解PHP内核(五)函数的内部结构,深入理解内部结构
  7. 【Socket网络编程】5.单播、多播(组播)、广播
  8. 图解Android Studio 2.0安装步骤
  9. Java并发编程:Synchronized底层优化(偏向锁、轻量级锁)
  10. Java 动态代理机制分析及扩展,第 1 部分