当前位置:首页 > 代码 > 正文

开源浏览器代码(开源浏览器代码在哪里)

admin 发布:2022-12-19 09:22 75


本篇文章给大家谈谈开源浏览器代码,以及开源浏览器代码在哪里对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

如何用Python开发一个简单的Webkit浏览器

在这篇教程中,我们会用 Python 的 PyQt 框架编写一个简单的 web 浏览器。关于 PyQt ,你可能已经有所耳闻了,它是 Qt 框架下的一系列 Python 组件,而 Qt(发音类似“cute”)是用来开发 GUI 的 C++ 框架。严格来讲, Qt 也可用于开发不带图形界面的程序,但是开发用户界面应该是 Qt 框架最为广泛的应用了。Qt 的主要优势是可以开发跨平台的图形界面程序,基于 Qt 的应用能够借助于各平台的原生性在不同类的设备上运行,而无须修改任何代码库。

Qt 附带了 webkit 的接口,你可以直接使用 PyQt 来开发一个基于 webkit 的浏览器。

我们本次教程所开发的浏览器可以完成如下功能:

加载用户输入的url

显示在渲染页面过程中发起的所有请求

允许用户在页面中执行自定义的 JavaScript 脚本

牛刀小试

让我们从最简单的 PyQt 的 Webkit 用例开始吧:输入 url,打开窗口并在窗口中加载页面。

这个例子十分短小,连 import 语句和空行在内也只有 13 行代码。

Python

1

2

3

4

5

6

7

8

9

10

11

12

13

   

import sys

from PyQt4.QtWebKit import QWebView

from PyQt4.QtGui import QApplication

from PyQt4.QtCore import QUrl

app = QApplication(sys.argv)

browser = QWebView()

browser.load(QUrl(sys.argv[1]))

browser.show()

app.exec_()

   

当你通过命令行将 url 传给脚本时,程序会加载 url 并且在窗口中显示加载完成的页面。

现在,看似你已经有一个“命令行浏览器”啦!至少比 python 的 requests 模块强多了,甚至比 Lynx 还略高一筹,因为我们的浏览器还可以加载 JavaScript 脚本呢。但是目前为止还没有跟 Lynx 拉开差距,因为在启用浏览器的时候只能通过命令行传入 url。那么,必然需要通过某种方式把需要加载的 url 传入浏览器。没错,就是地址栏!

添加地址栏

其实地址栏的实现非常简单,我们只需要在窗口顶端加一个输入框就够了。用户在文本框中输入 url 之后,浏览器就会加载这个地址。下面,我们将用到 QLineEdit 控件来实现输入框。鉴于我们的浏览器现在有地址栏和浏览器显示框两部分,因此还要给我们的应用增加一个网格布局。

Python

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

   

import sys

from PyQt4.QtGui import QApplication

from PyQt4.QtCore import QUrl

from PyQt4.QtWebKit import QWebView

from PyQt4.QtGui import QGridLayout, QLineEdit, QWidget

class UrlInput(QLineEdit):

def __init__(self, browser):

super(UrlInput, self).__init__()

self.browser = browser

# add event listener on "enter" pressed

self.returnPressed.connect(self._return_pressed)

def _return_pressed(self):

url = QUrl(self.text())

# load url into browser frame

browser.load(url)

if __name__ == "__main__":

app = QApplication(sys.argv)

# create grid layout

grid = QGridLayout()

browser = QWebView()

url_input = UrlInput(browser)

# url_input at row 1 column 0 of our grid

grid.addWidget(url_input, 1, 0)

# browser frame at row 2 column 0 of our grid

grid.addWidget(browser, 2, 0)

# main app window

main_frame = QWidget()

main_frame.setLayout(grid)

main_frame.show()

# close app when user closes window

sys.exit(app.exec_())

   

到这里,我们已经有一个浏览器的雏形啦!看上去和当年的 Google Chrome 还有几分相像呢,毕竟两者采用了相同的渲染引擎。现在,你可以在输入框中输入 url ,程序便会将地址传入浏览器,接着渲染出所有的 HTML 页面和 JavaScript 脚本并展示出来。

添加开发工具

一个浏览器最有趣也最重要的部分是什么?当然是各种各样的开发工具了!一个没有开发者控制台的浏览器怎么能算是浏览器呢?所以,我们的 Python 浏览器当然也要有一些开发者工具才行。

现在,我们就来添加一些类似于 Chrome 的开发者工具中 “Network” 标签的功能吧!这个功能就是简单地追踪浏览器引擎在加载页面的时候所执行的所有请求。在浏览器主页面的下方,我们将通过一个表来显示这些请求。简单起见,我们只会记录登录的 url、返回的状态码和响应的内容类型。

首先我们要通过 QTableWidget 组件创建一个表格,表头包括需要存储的字段名称,表格可以根据每次新插入的记录来自动调整大小。

Python

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

   

class RequestsTable(QTableWidget):

header = ["url", "status", "content-type"]

def __init__(self):

super(RequestsTable, self).__init__()

self.setColumnCount(3)

self.setHorizontalHeaderLabels(self.header)

header = self.horizontalHeader()

header.setStretchLastSection(True)

header.setResizeMode(QHeaderView.ResizeToContents)

def update(self, data):

last_row = self.rowCount()

next_row = last_row + 1

self.setRowCount(next_row)

for col, dat in enumerate(data, 0):

if not dat:

continue

self.setItem(last_row, col, QTableWidgetItem(dat))

   

想要追踪所有请求的话,我们还需要对 PyQt 的内部构件有更深入的了解。了解到,Qt 提供了一个 NetworkAccessManager类作为 API 接口,通过调用它可以监控应用加载页面时所执行的请求。我们需要自己编写一个继承自 NetworkAccessManager 的子类,添加必要的事件监听器,然后使用我们自己编写的 manager 来通知 webkit 视图执行相应的请求。

首先我们需要以 NetworkAccessManager 为基类创建我们自己的网络访问管理器。

Python

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

   

class Manager(QNetworkAccessManager):

def __init__(self, table):

QNetworkAccessManager.__init__(self)

# add event listener on "load finished" event

self.finished.connect(self._finished)

self.table = table

def _finished(self, reply):

"""Update table with headers, status code and url.

"""

headers = reply.rawHeaderPairs()

headers = {str(k):str(v) for k,v in headers}

content_type = headers.get("Content-Type")

url = reply.url().toString()

# getting status is bit of a pain

status = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute)

status, ok = status.toInt()

self.table.update([url, str(status), content_type])

   

在这里需要提醒大家的是, Qt 的某些实现并不像想象中那么简单明了,比如说从响应中获取状态码就十分繁琐。首先,你得把请求对象的类属性作为参数传入 response 的方法 .attribute() 中,.attribute() 方法的返回值是 QVariant 类型而非 int 类型。接着,需要调用内置函数 .toInt() 将其转换成一个包含两个元素的元组,最终得到响应的状态码。

现在,我们终于有了一个记录请求的表和一个监控网络的 manager,接下来只要把他们聚拢起来就可以了。

Python

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

   

if __name__ == "__main__":

app = QApplication(sys.argv)

grid = QGridLayout()

browser = QWebView()

url_input = UrlInput(browser)

requests_table = RequestsTable()

manager = Manager(requests_table)

# to tell browser to use network access manager

# you need to create instance of QWebPage

page = QWebPage()

page.setNetworkAccessManager(manager)

browser.setPage(page)

grid.addWidget(url_input, 1, 0)

grid.addWidget(browser, 2, 0)

grid.addWidget(requests_table, 3, 0)

main_frame = QWidget()

main_frame.setLayout(grid)

main_frame.show()

sys.exit(app.exec_())

   

现在,运行浏览器程序,在地址栏键入 url,就可以看到在主页面下方的记录表中记录下的所有请求。

如果你有兴趣的话,还可以为浏览器添加很多新的功能:

通过content-type添加筛选功能

添加记录表的排序功能

添加计时器

高亮显示出错的请求(比如说把错误信息置为红色)

显示出更为具体的请求内容,比如说完整的头信息、响应内容、请求方法等。

增加一个重复发送请求并加载出来的选项。比如说用户可以点击在记录表中的请求来重试请求。

其实还有太多的功能可以继续完善和改进,你可以一一尝试一下,这会是一个非常有趣而且收获良多的学习过程。但是如果想把这些功能都说完,估计都能写一本书了。所以限于篇幅,本文就不一一介绍了,感兴趣的朋友可以参考其他书籍和网上教程。

增加解析自定义 JavaScript 脚本的功能

我们终于迎来最后一个功能了!就是解析在页面中包含的 JavaScript 脚本。

基于我们之前已经打下的基础,要完成这个功能非常简单。我们只需要在添加一个 QLineEdit 组件,把它和页面联系起来,然后调用 evaulateJavaScript 方法就可以了。

Python

1

2

3

4

5

6

7

8

9

   

class JavaScriptEvaluator(QLineEdit):

def __init__(self, page):

super(JavaScriptEvaluator, self).__init__()

self.page = page

self.returnPressed.connect(self._return_pressed)

def _return_pressed(self):

frame = self.page.currentFrame()

result = frame.evaluateJavaScript(self.text())

   

下面是这个功能的示例。看,我们的开发者工具已经整装待发了!

Python

1

2

3

4

5

6

7

8

9

10

11

   

if __name__ == "__main__":

# ...

# ...

page = QWebPage()

# ...

js_eval = JavaScriptEvaluator(page)

grid.addWidget(url_input, 1, 0)

grid.addWidget(browser, 2, 0)

grid.addWidget(requests_table, 3, 0)

grid.addWidget(js_eval, 4, 0)

   

现在唯一缺少的就是在页面中不能执行 Python 脚本。你可以开发自己的浏览器,提供对 JavaScript 和 Python 的支持,这样其他开发者就可以针对你的浏览器开发应用了。

后退、前进和其他页面操作

我们在前面已经使用了 QWebPage 对象来开发浏览器,当然作为一个合格的浏览器,我们也需要为终端用户提供一些重要功能。Qt 的网页对象支持很多不同操作,我们可以把它们全都添加到浏览器中。

现在我们可以先尝试着添加“后退”、“前进”和“刷新”这几个操作。你可以在界面上添加这些操作按钮,简单起见,这里只加一个文本框来执行这些动作。

Python

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

   

class ActionInputBox(QLineEdit):

def __init__(self, page):

super(ActionInputBox, self).__init__()

self.page = page

self.returnPressed.connect(self._return_pressed)

def _return_pressed(self):

frame = self.page.currentFrame()

action_string = str(self.text()).lower()

if action_string == "b":

self.page.triggerAction(QWebPage.Back)

elif action_string == "f":

self.page.triggerAction(QWebPage.Forward)

elif action_string == "s":

self.page.triggerAction(QWebPage.Stop)

   

和之前一样,我们要创建一个 ActionInputBox 的实例,把参数传入页面对象并把输入框对象添加到页面中。

For reference here’s code for final result 示例代码看这里

[1]: Graphical User Interface,图形用户界面,又称图形用户接口,是指采用图形方式显示的计算机操作用户界面。

[2]: WebKit是一个开源的浏览器引擎,与之相对应的引擎有 Gecko(Mozilla Firefox 等使用)和 Trident(也称 MSHTML ,IE 使用)。

什么叫开源浏览器?

开源指的是这个软件的源代码是公开的。

开源浏览器即指源代码公开的浏览器软件。

IE 是微软公司的商业浏览器软件,其源代码是保密的。

对于普通用户来说,开源没有什么意义。

但对于软件开发者来说,开源意味着可以在软件的基础上进行改进或者修正错误。

Mozilla Firefox是开源的浏览器吗?哪里可以下载源代码?

Mozilla Firefox,中文俗称为“火狐”(被官方使用但是没作为商标),是由Mozilla基金会从Mozilla Application Suite独立出来采用开源与社区共同开发的网页浏览器。可以在多种操作系统运行,源代码以GPL/LGPL/MPL三种授权方式发布

chrome和Chromium有什么区别?

Chromium和Chrome的区别:

1、Chromium是谷歌的开源项目,开发者们可以共同去改进它,然后谷歌会收集改进后的Chromium并发布改进后安装包。Chrome不是开源项目,谷歌会把Chromium的东西更新到Chrome中。你也可以这么理解Chromium是体验版,Chrome是正式版;

2、Chromium不用安装,下载下来的是压缩包,解压后直接就可以使用。Chrome需要安装;

3、Chromium功能比Chrome多,因为新功能都是先在Chromium中使用,等完善后才添加到Chrome中。相对的Chrome就要比Chromium稳定很多不容易出错;

4、Chromium不开放自动更新功能,所以用户需手动下载更新,而Chrome则可自动连上Google的服务器更新,但新版的推出很慢。

扩展资料

Google Chrome是由Google开发的一款设计简单、高效的Web浏览工具。Google Chrome的特点是简洁、快速。

GoogleChrome支持多标签浏览,每个标签页面都在独立的“沙箱”内运行,在提高安全性的同时,一个标签页面的崩溃也不会导致其他标签页面被关闭。此外,Google Chrome基于更强大的JavaScript V8引擎,这是当前Web浏览器所无法实现的。

另有手机版的Chrome浏览器,于2012年发布了Chrome浏览器移动版,提供IOS系统、安卓系统以及Windows Phone系统的Chrome浏览器;

在保持浏览器原有特点的情况下,实现了多终端使用浏览器,具有共享收藏历史信息等功能,是手机浏览器的一次巨大突破。随着Android系统的份额不断扩大而市场占有率不断飙升。

软件名称

Google Chrome,又称谷歌浏览器,是一个由Google(谷歌)公司开发的免费网页浏览器。“Chrome”是化学元素“铬”的英文名称;

过去也用Chrome称呼浏览器的外框。本软件的程式码是基于其他开放源代码软件所撰写,包括WebKit和Mozilla,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。软件的名称是来自于又称作“Chrome”的网络浏览器图形使用者界面(GUI)。

软件优点

Chrome最大的亮点就是其多进程架构,保护浏览器不会因恶意网页和应用软件而崩溃。每个标签、窗口和插件都在各自的环境中运行,因此一个站点出了问题不会影响打开其它站点。通过将每个站点和应用软件限制在一个封闭的环境中这种架构,这进一步提高了系统的安全性。

速度快

使用WebKit引擎。WebKit简易小巧,并能有效率的运用存储器,对新开发者来说相当容易上手。Chrome具有DNS预先截取功能。当浏览网页时,“Google Chrome”可查询或预先截取网页上所有链接的IP地址。目标网页。

Chrome具有GPU硬件加速:当激活GPU硬件加速时,使用“Google Chrome”浏览那些含有大量图片之网站时可以更快渲染完成并使页面滚动时不会出现图像破裂的问题。

2013年4月份,Google宣布称将为Chrome浏览器开发新的自主浏览器引擎Blink,在最新的Chrome开发版本中,Blink已经正式现身。

Chromium是一个由Google主导开发的网页浏览器。以BSD许可证等多重自由版权发行并开放源代码。

Chromium的开发可能早自2006年即开始,设计思想基于简单、高速、稳定、安全等理念,在架构上使用了Apple发展出来的WebKit排版引擎、Safari的部份源代码与Firefox的成果,并采用Google独家开发出的V8引擎以提升解译JavaScript的效率;

而且设计了“沙盒”、“黑名单”、“无痕浏览”等功能来实现稳定与安全的网页浏览环境。Chromium是Google为发展自家的浏览器Google Chrome(以下简称Chrome)而开启的计划;

所以Chromium相当于Chrome的工程版或称实验版(尽管Chrome自身也有β版阶段),新功能会率先在Chromium上实现,待验证后才会应用在Chrome上,故Chrome的功能会相对落后但较稳定。

Chromium的更新速度很快,每隔数小时即有新的开发版本发布,而且可以免安装,下载zip封装版后解压缩即可使用(Windows下也有安装版)。Chrome虽然理论上也可以免安装,但Google仅提供安装版。

Chromium和Chrome所使用的webkit内核是目前公认的最快的网页浏览方式。

使用Chromium开源代码(基于webkit内核)的浏览器有360极速浏览器、枫树浏览器、太阳花浏览器、世界之窗极速版、傲游浏览器和UC浏览器电脑版等。

搜狗高速浏览器和qq浏览器官网未提及Chromium,只是说采用webkit内核,经网友测试这两款浏览器极有可能也是使用的Chromium,只是官方不承认而已。

2018年8月16日晚,红芯时代(北京)科技有限公司发布声明称:红芯浏览器内核是基于通用的浏览器内核架构(即Chromium开源项目,但不是Chrome浏览器)的基础上进行技术创新的;

区别于传统的浏览器,红芯浏览器是专门针对企业办公场景设计的,国际上浏览器内核技术是不断迭代更新的,红芯浏览器内核 Redcore是基于 Chromium/Bnk。

参考资料:Chrome.百度百科

参考资料:chromium.百度百科

google chrome是什么?

Chrome也是一个开源的浏览器,Chrome是由原先的“GoogleBrowser”项目发展而来,采用了Webkit的网页渲染引擎,还将包含Google的“GearsProject”。比较特别的就是这个内置的Gears引擎了,为我们创建离线版的浏览器应用提供了一种新的方案。让人没有猜到的是,Chrome并非基于那个Google一直大力推崇的老战友Firefox,而是基于苹果的WebKit引擎。尽管Safari除了在苹果自己的iMac和iPhone上运行外,没有太多的用户了,但WebKit却向它提供了一大优势:速度。这样对于那些对于Firefox难以忍受的用户来说,还是有这么点吸引力的。\x0d\x0a\x0d\x0a和当前几乎所有的浏览器不同的是,Chrome采用的是多进程的架构。将每个页面分离成单个的进程,可以通过ChromeProcessManager进行管理。这样我们在某一个页面崩溃的时候不会影响到整个浏览器的使用。Chrome的JavaScript.采用的是来自丹麦的V8,在对Dojo和Ext的一些应用的简单试用,感觉到JavaScript.的执行速度相对IE和Firefox有一定的优势。\x0d\x0a\x0d\x0aGoogle给Chrome提供了一个可以在线实时更新的恶意网站列表功能,第一时间反馈给用户所要访问的网页的危险性,避免可能的危害。这个和Google搜索提供的功能有些相似,不过基于浏览器的提醒会让用户更加注意上网的安全。\x0d\x0a\x0d\x0a总的来说,GoogleChrome秉承了Google的一贯特色,简洁。简洁的除了标签栏和地址栏,就再也找不到其他什么东西了,连状态栏都省掉了,连可以设置的东西也少的可怜

关于开源浏览器代码和开源浏览器代码在哪里的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/5904.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载