火车采集器软件交流官方论坛

 找回密码
 加入会员
搜索
火车采集器V9版免费下载火车浏览器 - 可视采集,万能群发,全自动脚本工具
查看: 3718|回复: 2

GOOGLE浏览器CHROME的网页抓取原理

[复制链接]
发表于 2008-11-19 16:19:40 | 显示全部楼层 |阅读模式
分析浏览器去下载网页的过程

[ 本帖最后由 faunus 于 2008-11-19 16:38 编辑 ]
 楼主| 发表于 2008-11-19 16:39:20 | 显示全部楼层

处理网页下载

入口函数NavigateToPendingEntry:
#001 void NavigationController::NavigateToPendingEntry(boolreload) {
#002 TabContents* from_contents = active_contents_;
#003
#004 // For session history navigations onlythe pending_entry_index_ is set.

下面从历史里找到入口选项。
#005 if (!pending_entry_) {
#006 DCHECK(pending_entry_index_ != -1);
#007 pending_entry_ = entries_[pending_entry_index_].get();
#008 }
#009


复位当前的SSL状态。
#010 // Reset the security states as any SSLerror may have been resolved since we
#011 // last visited that page.
#012 pending_entry_->ssl() = NavigationEntry::SSLStatus();
#013


设置内容是否可以显示。
#014 if (from_contents && from_contents->type()!= pending_entry_->tab_type())
#015 from_contents->SetActive(false);
#016


获取当前的父窗口的句柄。
#017 HWND parent =
#018 from_contents ? GetParent(from_contents->GetContainerHWND()): 0;


获取当前显示的TAB内容对象。
#019 TabContents* contents =
#020 GetTabContentsCreateIfNecessary(parent,*pending_entry_);
#021
#022 contents->SetActive(true);
#023 active_contents_ = contents;
#024


修改委托对象。
#025 if (from_contents && from_contents!= contents) {
#026 if (from_contents->delegate())
#027 from_contents->delegate()->ReplaceContents(from_contents,contents);
#028 }
#029


现在开始打开入口对象里指定的网站。
#030 if (!contents->Navigate(*pending_entry_,reload))
#031 DiscardPendingEntry();
#032 }

TabContents类主要描述主显示区的内容,在第30行里就调用它的函数Navigate去浏览网页的内容。pending_entry_成员变量是NavigationEntry类的对象,它主要保存所有创建浏览时需要的信息,比如网络连接地址。

当我再跟踪contents->Navigate这行代码时,它不是运行TabContents类的Navigate,这比较奇怪,但回过头来再看一下它的声明如下:
virtual bool Navigate(constNavigationEntry& entry, bool reload);
可见,它前面加了virtual关键字,说明它是虚函数,也就是说设计时,就让它是多态的出现,因此在什么情况下运行什么样的函数内容是不定的,对于这些样的函数,就需要小心一点了,只有实际运行的类才知道它是什么内容。由于我是输入URL关键字,所以它调用的函数是类WebContents里的Navigate函数。下一次再来分析类WebContents里的Navigate函数。

[ 本帖最后由 faunus 于 2008-11-19 16:48 编辑 ]
发表于 2016-2-9 23:57:26 | 显示全部楼层
爪,以后学习下。。
您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

QQ|手机版|Archiver|火车采集器官方站 ( 皖ICP备06000549 )

GMT+8, 2024-11-24 16:55

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表