获取含跨域网址的框架网页的源码
前面介绍过的获取框架网页的源码的方法在针对框架中每个文档的URL都是和主网页在同一个域名(同一个网站)的情况下是不会出什么问题的,但如果框架包含的网页是别的域的话,例如以下网页:该网页含左右两个框架,都包含别的域的网址,该网页源码如下:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>框架网页</title>
</head>
<frameset cols="*,*" frameborder="no" border="0" framespacing="0">
<frame src="http://www.baidu.com" name="leftFrame" id="leftFrame" title="leftFrame" />
<frame src="http://www.google.cn" name="mainFrame" id="mainFrame" title="mainFrame" />
</frameset>
<noframes><body>
</body>
</noframes></html>
如果使用以下的代码获取这两个框架的网页源码:
procedure TForm1.Button1Click(Sender: TObject);
var
doc, framedoc: IHTMLDocument2;
frame_dispatch: IDispatch;
ole_index: OleVariant;
i: Integer;
begin
doc := WebBrowser1.Document as IHTMLDocument2;
if doc = nil then Exit;
for i := 0 to doc.frames.length - 1 do
begin
ole_index := i;
frame_dispatch := doc.frames.item(ole_index);
if frame_dispatch = nil then Continue;
framedoc := (frame_dispatch as IHTMLWindow2).document;
if framedoc = nil then Continue;
ShowMessage(framedoc.body.innerHTML);
end;
end;
执行这段代码,系统会弹出“拒绝访问”的出错对话框,没有任何商量的余地。怎么办,框架网页的源码还是要获取的,不会因为跨域问题而放弃的。只有百度一下了,几番搜索,终于找到了另一种获取网页源码的方法,而这种方法可以解决跨域问题,方法如下:
1. 单元引用 Uses MsHtml, ActiveX
2. 代码:
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
ole_index: OleVariant;
FrameDis: IDispatch;
FrameWin: IHtmlWindow2;
psi:IServiceProvider;
frameb: IWebBrowser2;
pPersist: IPersistStreamInit;
ss: TStringStream;
str1, str2: String;
begin
if WebBrowser1.Busy then Exit;
Memo1.Lines.Clear;
//获取主网页网址
Memo1.Lines.Add(WebBrowser1.OleObject.document.url);
//获取主网页源码
Memo1.Lines.Add(WebBrowser1.OleObject.document.documentElement.outerHTML);
//添加空行
Memo1.Lines.Add(' ');for i := 0 to WebBrowser1.OleObject.document.frames.length - 1 do
begin
ole_index := i;
FrameDis := (WebBrowser1.Document as IHtmlDocument2).frames.item(ole_index);
FrameDis.QueryInterface(IID_IHTMLWindow2, FrameWin) ;
if FrameWin = nil then Continue;
FrameWin.QueryInterface(IServiceProvider, psi);
if psi = nil then Continue;
psi.QueryService(IID_IWebBrowserApp,IID_IWebBrowser2,frameb);
if frameb=nil then continue;
frameb.Document.QueryInterface(IPersistStreamInit, pPersist);
if pPersist = nil then Continue;
//获取框架页网址
Memo1.Lines.Add((frameb.Document as IHtmlDocument2).url);
ss := TStringStream.Create('');
try
//获取框架页源码
if Succeeded(pPersist.Save(TStreamAdapter.Create(ss), True)) then
begin
str1 := ss.DataString;
str2 := Utf8ToAnsi(str1); //有些网页使用UTF-8编码方式,不进行转换中文会乱码
if str2 = '' then
Memo1.Lines.Add(str1)
else
Memo1.Lines.Add(str2);
end;
finally
FreeAndNil(ss);
end;
Memo1.Lines.Add(' '); //添加空行
end;
end;
获取含跨域网址的框架网页的源码相关推荐
- 完全跨域的单点登录(SSO)解决方案源码解析
为什么80%的码农都做不了架构师?>>> 本文介绍的是一种PHP的开源SSO解决方案,可完全跨域,实现较简洁,源码地址:https://github.com/legalthin ...
- HTML5期末大作业:电商购物网站设计——易购电商购物网页设计与实现(31页) 含论文+答辩+PPT 计算机毕设网页设计源码 HTML+CSS+JavaScript web课程设计网页规划与设计...
HTML5期末大作业:电商网站设计--易购电商购物网页设计与实现(31页) 含论文+PPT 学生DW网页设计作业成品 HTML+CSS+JavaScript web课程设计网页规划与设计 计算机毕设网 ...
- Django框架深入了解_01(Django请求生命周期、开发模式、cbv源码分析、restful规范、跨域、drf的安装及源码初识)
阅读目录 一.Django请求生命周期: 二.WEB开发模式: 三.cbv源码分析: 四.认识RESTful 补充知识:跨域 五.基于原生django开发restful的接口 六.drf安装.使用.A ...
- 操作系统ppt_华为车BU王军:华为三大汽车操作系统,及跨域集成软件框架(内含PPT)...
2020年8月13日-15日,"2020中国汽车论坛"在上海召开.该论坛是由中国汽车工业协会(CAAM)主办,世界汽车组织(OICA).世界经济论坛(WEF)支持.在8月14日举办 ...
- webbrowser抓取php网页源码,获取webbrowser控件 网页的源码(收藏)
获取webbrowser控件 网页的源码(收藏) 翻译|其它|编辑:郝浩|2005-04-28 09:45:00.000|阅读 3152 次 概述: 我在网上找到使用rft控件保存webbrowse文 ...
- php 框架获取服务器,Thinkphp 框架基础之源码获取、环境要求与目录结构分析
本文实例讲述了Thinkphp 框架基础之源码获取.环境要求与目录结构.分享给大家供大家参考,具体如下: 获取ThinkPHP 获取ThinkPHP的方式很多,官方网站(http://thinkphp ...
- 众多网页游戏源码素材一键即可获取
上次给大家测评过手游的游戏源码素材,大家觉得怎么样呢?想必大家也在为找网游游戏源码素材而头疼吧,今天小编都为大家整理好咯,大家喜欢的可以先行收藏哈,之后会持续更新哒~ 爱给网 登录问题: QQ一键注册 ...
- 基于JAVA跨境电商网站计算机毕业设计源码+数据库+lw文档+系统+部署
基于JAVA跨境电商网站计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVA跨境电商网站计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目架构:B/S架构 开发语言:Ja ...
- HTML5期末大作业:网上花店网站设计——简约的网上花店网站设计(4页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码
HTML5期末大作业:网上花店网站设计--简约的网上花店网站设计(4页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码 常见网 ...
最新文章
- R语言bioconductor包—maftools的使用
- “数字化”才是智能制造的基础!
- java+enum+devicetype_JSF web编程:通过enum数组生成
- 互联网协议 — BGP 边界网关协议 — Overview
- 怎么强制限制div宽度
- 辅助方法 @Html.Raw与 HtmlString区别
- MFC命令行及CCommandLineInfo类
- mysql 临时索引_MYSQL临时表创建索引
- 菜单栏、工具栏、状态栏
- win7系统如何升级安装win11正式版,win7升级win11系统的方法
- JVM学习笔记 之 JVM概述
- 一些常用的MacBook快捷键
- 小说作者推荐:休屠城合集
- Unsupported major.minor version 52.0 解决方案
- 求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积(基础作业
- 基因数据处理104之SparkBWAMaster文件得到空文件,中间sam文件找不到
- 【2015年第4期】城市交通大数据技术及智能应用系统
- NOIP2016 天天爱跑步 线段树合并
- 联想微型计算机开机没反应,电脑开机没反应,教您怎么解决电脑开机没反应
- 打印设置自定义表尾_打印excel工作表时,如何把表头和表尾一起打印到每一页上?-excle怎样设置表尾打印...