【网络爬虫教学】虫师终极武器之Chromium定制开发系列(三)

Hi,大家好,欢迎大家观看由IT猫之家打造的【网络爬虫教学】虫师终极武器之Chromium定制开发系列教学文章的第三篇,如果您是第一次观看本系列教程,请先移步到这里看完前两篇后再回来哦!大家在学习的过程中,有任何疑问可以留言或加入我们的QQ技术交流群进行探讨: 544185435

概述

在前面的文章中我们有提及过,本系列教学文章,主要围绕着如何打造一款随机化指纹的高匿浏览器而写,但其实想要二次开发浏览器还是需要掌握一些必要的知识的,其中我们还必须要懂CPP语言、因为在开发过程中,所有功能都将通过它来实现,同时我们还需熟悉chromium的目录结构,以便于可以快速的定位文件所在目录以及解决开发过程中遇到的各种难题,如果您只为了编译浏览器而编译,那么上一篇文章就已经可以满足您的需求,否则您可以继续往下观看我后续的文章!

关于Chromium

Chromium 是谷歌为发展自家浏览器Chrome而开启的开源项目,核心分为两个部分(不包含其它库),它们分别是browser与renderer(包括Blink渲染器和Web引擎);其中browser主要负责所有的UI和I/O操作,而renderer是由browser驱动的(通常)泛指每个选项卡的子进程。它被嵌入到Blink中用于渲染与布局。

Chromium顶级项目

当我们拉取完整个chromium的源码后,我们可以看到目录中有许许多多的顶级目录,我们需要理解它们的关系以及相互的作用,因为Chromium 是一个代码量高达百万级别的大型项目,而面对这一庞然大物,我们只有理解了它的构造以及每个项目之间的对应关系后才能有效的提供我们的开发效率。

其中主要的顶级项目目录以及其相应的作用如下:

android_webview :在src/content 中提供适合集成到安卓平台的外观展示,值得注意的是,它不能单独作为APK程序开发。

apps:参考如何构建Chrome应用程序

base: 提供所有子项目之间共享的通用代码,包含字符串操作、通用的应用程序等,只有当项目必须要在项目之间共享时才会在此添加内容。

breakpad:提供Google开源项目的崩溃报告(仅供参考),如果大家按照我前面文章的方式拉取的Chromium,则不会出现该目录。

build: 存放所有工程共用的编译配置。

cc: Chromium 的渲染合成层,是整个Chromium最复杂的部分。

chrome: Chromium浏览器。

chrome/test/data: 该目录存放一些可用于测试性的数据文件。

components: 该目录用于存放浏览器相关依赖的组件。

content:提供多进程沙盒浏览器实现所需的核心代码,详情可参考:Content模块的实现。

device:提供跨平台底层硬件API抽象层。

net: Chromium开发的网络库,在使用webkit下的 test_shell 时可以单独使用。

sandbox: 沙盒项目,阻止黑客通过渲染器修改系统。

skia + third_party/skia: Google的Skia图形库,在ui/gfx目录中附加类包装Skia。

sql:提供sqlite相关的模块。

testing:该目录包含了谷歌开源的GTest项目,仅用于单元测试。

third_party: 该目录提供包含200多个小型或大型的第三方库,如图像解码库、压缩算法库、Web引擎Blink(Blink是基于Webkit开源协议的继承)为取代webkit将HTML,CSS和脚本转换为绘画命令和其他状态而开发的内核渲染器。详情可以参阅:第三方软件包

ui/gfx:共享的图形库,提供用于构建Chromium UI的基础。

ui/views: 一个简单的开发框架,用于UI开发、渲染并提供布局与处理机制,大多数浏览器的UI都是基于该框架实现,该框架中仅包含了一些基础的对象,还有些特定的对象位于: chrome/browser/ui/views 之中。

url: Google开源的URL解析和规范库。

v8: 谷歌开发的一款基于Javascript的解释引擎。

由于Chromium更新是非常频繁的从官网我们可以看到它基本每日一更,在这当中可能有些库或接口已经遭到废弃,或已被别的组件取缔,但就目前而言,以上罗列的所有项目目前均可有效或正在处于应用阶段,展望未来,新版本的指南也将会更详细的描述其它相关的项目及作用。

上图为Chromium稍微有些过时的依赖关系图,当中的webkit已被Blink/renderer所取代,较为底层的模块不可直接引用顶层的代码(即不可引用包含来自chrome的头文件)而是通过嵌入API接口与其通信。

快速理解content目录结构

browser:浏览器后端应用程序,负责处理所有I/O与子进程相关通信、与renderer进行通信并且管理网页的绘制。

common:多进程之间共享的文件(如:浏览器与renderer之间、renderer与插件之间等),该代码专用于Chromium,并不适合安放在base目录下。

gpu:负责处理GPU进程的代码,用于处理3D合成,以及包括一些3D相关的API接口。

plugin:在其它进程中运行浏览器插件相关的代码。

ppapi_plugin:可参考peper插件的实现

renderer: 每个选项卡中渲染的独立子进程,这将被嵌入到webkit中并与browser进行I/O通信。

utility:在沙盒进程中运行随机操作的代码,当浏览器进程要对不受信任的数据运行操作时,将会使用它。

worker: 用于运行HTML5 Web Worker的代码。

快速理解chrome目录结构

app: app是最顶级的应用,它在启动时被加载,并根据当前进程相应的功能分发到浏览器或渲染器,它包含了chrome.exe和chrome.dll两个项目,除图像与字符串之类的资源外,您通常不需要修改这些内容。

locales: 用于构建本地DLL项目。

resources:  存储图片与光标资源。

theme: 存放窗口与主题的图像。

browser:前端包括主窗口、用户界面和处理所有I/O和存储的应用程序的后端,处理与rederer渲染器相关的问题。

处理ui特性和功能的ui模型、视图与控制代码。

common:存放浏览器和渲染器之间共享的Chrome专用模块。

net:一些chromium专用的顶级网络模块,它们应与browser/net合并。

installer: 用于制作安装包(MSI程序)的源文件及目录。

renderer:在渲染器进程中执行特定的chrome代码,这会将Chrome的功能(如:自动填充、翻译等功能)添加到 content 模块中。

test

automation:通过使用test来驱动浏览器,例如:test/ui、test/startup等等,这常用于浏览器自动化通信开发之中。

page_cycler:在运行页面中做循环压力测试的代码。

reliability:页面可靠性测试,用于对页面加载进行分布式测试,以便于获取可靠的测试指标以及崩溃情况。

selenium:用于执行selenium的测试代码,它是基于Ajaxy和JavaScript开发的第三方测试组件。

startup:用于启动性能的测试。

ui:UI测试用于展示浏览器UI、打卡的选项卡等,它通过: test/automation 可以执行大多数操作。

unit:单元测试的基本代码,单个测试的代码通常与*_unittest.cc文件放在一起测试。

third_party:专用于Chromium的第三方库,还有一些第三方库位于顶级的third_party库之中。

tools

build:与构建相关的工具与随机内容。

buildbot: Buildbot配置。Buildbot管理我们的自动化构建系统。

win: Windows构建相关的东西,包括一些.vsprops用于项目属性和脚本的文件。

memory:内存工具,包括当前用于设置堆栈选项的gflags。

perf/dashboard:将性能日志(例如:test/startup_test)转换为数据和图形的代码。

profiles:随机历史数据生成器。用于生成测试配置文件。

总结

以上为本期给大家分享的所有内容,原本打算直接开始着手开发的,但考虑到许多童鞋可能还没接触过Chromium,所以还是很有必要花一篇文章的时间来给大家科普一些相关知识的,总的来说呢,想要二次开发Chromium,我们必须要理解上述的目录与结构,这对我们开发非常有帮助的,那么接下来我将会讲解:third_party/blink 这个目录下与之相关的文件,因为我们自动化的功能全部都在此实现。欢迎大家继续参阅!

原文转至IT猫之家,转载请注明出处!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • 转载自http://blog.csdn.net/qq295445028/article/details/79930...
    WebSSO阅读 2,764评论 0 3
  • 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/con...
    梦里茶阅读 2,049评论 0 8
  • Chromium 源代码目录结构 本文翻译自 官方文档 概述 Chromium 主要分为三个部分: browser...
    董哒哒阅读 9,315评论 1 6
  • 我的笔记 关于Chromium 源文章地址 源代码语言 结构 Chromium分为三个主要部分(不包括其他库):浏...
    zhchhhemmm阅读 156评论 0 1
  • 2019年1月22日,今天是我们第一学期在校复习的最后一天。数学老师给我们讲了“从”几开始的几位数这类题,我现在抓...
    锐麻麻阅读 87评论 0 0