当前位置:文档之家› Febotion HTML Spy 设计文档

Febotion HTML Spy 设计文档

Febotion HTML Spy 设计文档
Febotion HTML Spy 设计文档

Febotion

HTML Spy

设计文档

广东省15届高校杯软件设计大赛参赛作品

目录

1 可行性研究报告 3 2项目开发计划 5 3软件需求说明书 6 4数据需求7 5概要设计说明书8 6详细设计说明书10 7界面30 8 总结34

1可行性研究报告

1.1引言

网页是人们从网络获得资信的一种重要媒体,他是网状站管理员与用户的一种互动媒介,然而随着网络和操作系统的发展,一些网络的安全隐患逐渐出现,网站管理员需要考虑如何编写好程序才能规范和限制用户提交的数据,用户也希望对自己浏览的网页内容有一定的选择权和知情权。但是我们知道,即使是解析的网页程序也好,需要经过编译的网页程序也好,网页到达用户的浏览器时终究会变成一个静态的超文本(HTML)网页和一些脚本语言;而用户最终浏览的内容和提交给服务器的信息也是通过这个静态网页和脚本的协助,因此浏览器内的网页就是用户和服务器之间的一扇窗,有着特别的意义。本作品使用COM接口技术,通过获得Internet Explorer_Server 类的VCL控件的IHTMLDocument2接口对网页进行在线操作。

1.1.1编写目的

HTML本身就是允许公开源代码,查看源代码是浏览器用户的权利(一般浏览器都提供直接查看源代码的功能),然而一些不道德的网站管理着为了自己的利益,会强迫用户遭受一些视觉污染和操作不便(如禁止了用户正常使用键盘鼠标的权利,强行要求用户把网页添加收藏夹和设为主页),也为了防止用户破解他们的网页内容;而作为网站程序开发者,规范用户提交的信息是非常重要的事情,不少网站开发者习惯单靠JavaScript/VBScript在浏览器中对用户提交的信息做限制,一些对HTML和JavaScript/VBScript熟悉的用户很可能运用他们的技巧跳过这些限制达到提交非法数据的目的。本作品就是面向浏览网页的用户和网站开发人员,为网页浏览用户提供一个为有助于了解自己浏览的网页内容,甚至可以为自己创造一个有利的浏览环境的软件,也可供网页开发者反复测试所开发的网页的安全性。

1.1.2背景

微软的Microsoft Internet Explorer(IE)是目前广泛被应用的浏览器软件,该软件嵌入到Windows系列操作系统中,与操作系统紧密联系,并且为操作系统及运行在操作之上的应用程序提供丰富的接口。当今已经有少部分操作IE接口的程序,这部分软件大部份是利用IE接口获得网页的源程序和分析HTML元素,而且通常是作为一个辅助功能存在,能提供准确修改网页内容的就更少(本人暂时没有发现此类软件)。

本作品则是完全利用IE接口这一功能,充分利用它提供的丰富功能,以分析和修改在线网页的代码为主要功能而设计。它又与一般的网页编辑软件不同,因为一般的网页编辑软件需要把网页下载到本地后再进行打开文件然后修改,此时网页已经脱离与服务器的连线,一些服务器在处理用户提交的信息前会检测信息源来自什么位置,若发现不是来自本服务器的信息就会拒绝处理,因此修改失去了意义;而本程序的修改原理就完全不同,它是直接修改已经读入IE内的内容,修改过程一直保持网页与服务器连线状态,因此修改后的不存在服务器验证问题。再者,一些使用IE接口分析网页的软件往往是在自己软件本身内放置一个Internet Explorer_Server类的VCL控件,在软件本身内打开网页并进而分析,然而这样的设计非常有局限性,这要求用户必须在分析网页前了解目标网页的地址,这样对于一些屏蔽了用户键盘和鼠标操作,关闭了地址栏的网页简直无从下手;再者,一些嵌套在应用程序中的Internet Explorer_Server类的VCL控件操作时会收到应用程序本身检测用户操作是否来自于

嵌套在程序本身,若发现不是,则忽略该操作(比如QQ宠物的操作界面就是一嵌套在应用程序中的Internet Explorer_Server类的VCL控件,即使你获得操作界面的地址,在IE地址栏内输入也是无法访问的,因为服务器能检测访问请求是否来自QQ宠物本身)针对这个弊端的思考,本软件设计采用获取其他程序软件内的Internet Explorer_Server类的VCL控件句柄,再分析出接口然后再加以操作的方式,这样可以对任意打开的IE窗口,甚至是嵌套在其他应用程序内的Internet Explorer_Server 类VCL控件内的网页内容也可以操作,具有广泛适应性。

1.1.3参考资料

Microsoft MSDN Library(https://www.doczj.com/doc/2f7422894.html,)

https://www.doczj.com/doc/2f7422894.html,(https://www.doczj.com/doc/2f7422894.html,)

1.2可行性研究的前提

1.2.1要求与目标

要让软件操作对象灵活,不局限于从软件本身获得数据,而要通过一定渠道从其他正在运行的软件程序中获得这些数据并控制这些数据。可以使用一个VCL控件作为拖动对象进行拖动操作,触发OnMouseMove()事件,在该事件中使用WindowFromPoint()该API函数判断当前鼠标下的VCL控件的句柄,从而入手获取目标控件的各种接口。

1.2.2条件、假定和限制

系统为Microsoft Windows9x/ME/2000/XP/2003,并且Microsoft Internet Explorer版本在5.5或以上。

1.3对现有系统的分析

1.3.2局限性

只作为辅助功能存在,仅针对自己的软件内的Internet Explorer_Server类的VCL控件操作,局限性大,并且用户只能被动得接受反馈分析的结果。

1.4所建议的系统

1.4.1数据流程各处理流程

1.4.3改进之处

通过获取非自身内的IE句柄来获得接口,应用更加灵活;针对网页内容允许做修改。2项目开发计划

2.1项目概述

2.1.1工作内容

项目界面设计,资料查找,美工制作,程序编写,后期测试。

2.1.2主要参加人员

由于工程项目不算庞大,由一人完成项目界面设计,资料查找,美工制作,程序编写工作,后期测试做简单的内测,排除已发现问题后将在网上小规模发布测试版,尽量接收用户的意见反馈。

2.1.3产品及成果

2.1.

3.1程序

软件主体:HtmlSpy.exe

辅助数据:explain.txt

2.2支持条件

2.2.1计算机系统支持

硬件系统:AMD Duron 800MHZ处理器512M DDR内存

软件系统:Microsoft Windows XP SP2 简体中文版IE6 SP2简体中文版

2.2.2需要用户承担的工作

自备购买必要的计算机软、硬件系统

3软件需求说明书

3.1需求规定

3.1.1对功能的规定

a.能操作任何应用程序上的Internet Explorer_Server类VCL控件内的网页。

b.对网页内的元素提供多角度的分析和修改方法(直接代码修改、属性事件修改、包

含文本修改)。

c.提供网页Cookie的分析和修改。

d.提供JavaScript/VBScript插入和执行

e.允许直接在IE窗口内可视化编辑网页内容

f.允许控制IE滚动条

g.允许直接修改网页主体代码

h.允许把网页保存为独立的mht文件

i.允许把网页保存为纯文本txt文件

j.允许修改网页内文本、连接的颜色

k.提供高亮标记关键字功能

l.提供软件运作的一些相关设置

3.1.2对性能的规定

3.1.2.1精度

对各种操作有精确的反馈,操作失败,要准确告诉用户原因与建议方案。

3.1.2.2灵活性

通过拖动图标方式确定Internet Explorer_Server类VCL控件,切换目标时只需要把

图标拖动到另一Internet Explorer_Server类VCL控件即可。

3.1.3输入输出要求

输入:基本使用鼠标完成操作,当执行修改操作时候需要使用键盘输入字符。

输出:输出结果在目标Internet Explorer_Server类VCL控件可以实时看到。

3.2运行环境规定

3.2.1设备

300Mhz或更高CPU,64MB或更高内存的兼容机

3.2.2支持软件

Microsoft Windows95/98/2000/XP/2003简体中文版

Microsoft Internet Explorer 5.5或以上

3.2.3接口

Microsoft Internet Explorer内置软件接口

3.2.4控制

键盘,鼠标操作即可

4数据需求

4.1数据的逻辑描述

这些数据都在程序启动时候设定好,在整个程序运行过程中不会改变。

4.2数据的采集要求和范围

网页数据完全通过Internet Explorer_Server类VCL的IHTMLDocument2接口获得,而其他数据通过系统API函数和C++ Builder 类库函数获得。

5概要设计说明书

5.1总体设计

使用C++ Builder 6进行全开发过程。C++ Builder 6是一款出色的开发软件,它开发效率高,编译器优秀,使用它可以让本软件高效完成。

5.2接口设计

5.3运行设计

5.4系统出错处理设计

5.4.1出错信息

出错信息只要有两种方式提示:

1、以状态栏右侧的信息提示。这个种提示主要是一些不严重的错误信息提示,错误

不会造成严重影响,用户可以根据提示选择重做操作或者忽略操作。

2、以信息筐(MessageBox)方式提示,这种提示用于非常必要通知用户的情况,如

果不做相应的解决措施将无法正常操作的提示。

5.4.2补救措施

针对两种方式出错信息提示,补救措施有:

1、以状态栏右侧的信息提示,一般使用try{…}catch(…){}或者try{…}__finally{…}

来将可能出错内容包含起来,一般情况下,在catch(…){}中作错误提示信息;若

程序执行过new生成类实体,则在__finally{…}中用delete语句删除,保证了正

确释放内存。

2、以信息筐(MessageBox)方式提示的,一般是接口的获得和调用问题。

IHTMLDocument2接口的操作都会返回HRESULT类型的值,只要用

SUCCEEDED(HRESULT)返回真假,就可以判断接口操作是否正确执行,从而做

响应补救。

6详细设计说明书

6.1 程序系统的组织结构

以元素、页面信息、常用元素、Cookie、高级、选项、其他作为划分模块依据,他们都可以分别独立操作,但是都以IHTMLDocument2接口作为前提,所有模块的运作都建立在IHTMLDocument2接口获得并且可用的条件之上。以下为主要程序段介绍。

6.2 void ShowUsefulScript(String ScriptCode,bool IsJavaScript)设计说明

6.2.1 程序描述

程序提供一些常用的脚本工具供用户使用,使用该程序可以安用户需求帖出这些代码。

6.2.2 功能

在“高级”模块中的“执行脚本”中贴入常用的脚本工具代码。

6.2.3 输入项

String ScriptCode 脚本代码

bool IsJavaScript 是否JavaScript脚本语言

6.2.4 输出项

在脚本语言输入筐(HTMLAdvancedScriptCode)中贴入脚本代码;脚本类型(HTMLAdvancedScriptType)显示相应的脚本类型。

6.2.5 流程逻辑

6.2.6 存储分配

脚本语言输入筐(MainForm->HTMLAdvancedScriptCode)

脚本类型(MainForm->HTMLAdvancedScriptType)

6.2.7 限制条件

脚本语言输入筐(MainForm->HTMLAdvancedScriptCode)最大字符容量

6.2.8 测试计划

6.2.9 尚未解决的问题

6.3 void ReadSetFromIni()设计说明

6.3.1 程序描述

用于读取保存在设置文件config.ini设置信息。

6.3.2 功能

以ini文件读取格式打开config.ini,读取各参数并做相应设置。

6.3.3 输入项

config.ini及其内容。

6.3.4 输出项

程序主窗口高(MainForm->Height)

程序主窗口宽(MainForm->Width)

程序主窗口顶距离(MainForm->Top)

程序主窗口左距离(MainForm->Left)

程序主窗口总在最前面(MainForm->HTMLSetAlwaysTop->Checked)

外筐提示被选中的对象(MainForm->HTMLSetShowObjRect->Checked)

拖动图标时显示鼠标下元素信息(MainForm->HTMLSetGetActionEle->Checked)显示元素信息时自动读取元素属性/事件(MainForm->HTMLSetAutoShowElementAttr->Checked)

隐藏没有设定的元素属性/事件(MainForm->HTMLSetHideNoUseAttr->Checked)6.3.5 流程逻辑

6.3.6 存储分配

6.3.7 限制条件

congif.ini存在(若不存在,全部使用默认设置)

congif.ini对应设置参数存在(若不存在,该参数使用默认设置)

6.3.8 测试计划

congif.ini不存在的情况

congif.ini对应参数不存在的情况

congif.ini文件名大小写各种情况

6.3.9 尚未解决的问题

6.4 void WriteSetToIni()设计说明

6.4.1 程序描述

用于保存设置信息到设置文件config.ini。

6.4.2 功能

以ini文件读取格式打开config.ini,写入各参数设置信息。

6.4.3 输入项

程序主窗口高(MainForm->Height)

程序主窗口宽(MainForm->Width)

程序主窗口顶距离(MainForm->Top)

程序主窗口左距离(MainForm->Left)

程序主窗口总在最前面(MainForm->HTMLSetAlwaysTop->Checked)

外筐提示被选中的对象(MainForm->HTMLSetShowObjRect->Checked)

拖动图标时显示鼠标下元素信息(MainForm->HTMLSetGetActionEle->Checked)显示元素信息时自动读取元素属性/事件(MainForm->HTMLSetAutoShowElementAttr->Checked)

隐藏没有设定的元素属性/事件(MainForm->HTMLSetHideNoUseAttr->Checked)

6.4.4 输出项

config.ini设置文件

6.4.6 存储分配

cinfig.ini文件

6.4.7 限制条件

congif.ini存在(若不存在,自动新建这个文件)

congif.ini对应设置参数存在(若不存在,新建这些参数设置)

congif.ini非只读

congif.ini所在磁盘非只读

6.4.8 测试计划

congif.ini不存在的情况

congif.ini对应参数不存在的情况

congif.ini文件名大小写各种情况

congif.ini只读的情况

磁盘只读的情况

6.4.9 尚未解决的问题

6.5 IHTMLElement* ElementFromIndex(long index)设计说明

6.5.1 程序描述

获得指定编号元素的指针

6.5.2 功能

通过IHTMLDocument2接口获得元素集合,然后根据元素编号找到对应编号的元素,并且返回其指针。

6.5.3 输入项

long index 元素编号

IHTMLDocument2 接口指针

6.5.4 输出项

目标元素IHTMLElement指针

6.5.5 流程逻辑

6.5.6 存储分配

IHTMLElement指针

6.5.7 限制条件

IHTMLDocument2存在

IHTMLElementCollection获得成功

IHTMLElement指针获得成功

6.5.8 测试计划

IHTMLDocument2不存在的情况

IHTMLElementCollection获得成功后IHTMLDocument2不存在的情况IHTMLElement指针获得成功后IHTMLDocument2不存在的情况

6.5.9 尚未解决的问题

6.6 void ShowElementAttr(IHTMLElement* Element)设计说明

6.6.1 程序描述

显示目标元素属性/事件信息

6.6.2 功能

遍历元素的所有属性和事件,把符合要求的属性和事件列举出来

6.6.3 输入项

IHTMLElement* Element 目标元素指针

6.6.4 输出项

在元素属性/事件列表(MainForm->HTMLThisProperty)

6.6.6 存储分配

MainForm->HTMLThisProperty元素属性/事件列表

6.6.7 限制条件

IHTMLElement指针存在

IHTMLDOMNode获得成功IHTMLAttributeCollection获得成功

6.6.8 测试计划

IHTMLElement不存在

IHTMLDOMNode获得成功后IHTMLElement不存在

IHTMLAttributeCollection获得成功后IHTMLElement不存在

6.6.9 尚未解决的问题

6.7 void ShowElement(IHTMLElement* Element,bool IsFromMouse)设计说明

6.7.1 程序描述

显示元素的相关信息,包括类型、说明、外筐位置、包含文本、HTML代码、元素属性/事件。

6.7.2 功能

根据IHTMLElement接口显示元素相关信息,包括类型、说明、外筐位置、包含文本、HTML代码、元素属性/事件。

6.7.3 输入项

IHTMLElement* Element元素指针

bool IsFromMouse标记是否鼠标拖动图标时鼠标下的实时元素,若不是,要判断是否同时更新元素列表的内容。

6.7.4 输出项

元素列表

元素信息(类型、说明、外筐位置、包含文本、HTML代码、元素属性/事件)

6.7.5 流程逻辑

6.7.6 存储分配

MainForm->HTMLEleList元素列表

MainForm->HTMLThisProperty元素属性/事件列表

6.7.7 限制条件

IHTMLElement指针存在

6.7.8 测试计划

IHTMLElement指针不存在的情况

6.7.9 尚未解决的问题

IFRAME/FRAME这类嵌套在网页内的框架内容,无法直接检测其嵌套页内的元素信息,要进入框架内页面才能操作;而且受IE安全限制,与当前操作页的域不同的框架无法操作。

6.8 void SaveWholePage(BSTR bstrUrl, BSTR bstrFileName)设计说明

6.8.1 程序描述

把网页保存为mht文件

6.8.2 功能

把指定地址的亡页保存为一个独立的mht文件。

6.8.3 输入项

BSTR bstrUrl目标网页地址

BSTR bstrFileName希望保存后的文件名

6.8.4 输出项

保存后的mht文件

6.8.6 存储分配

生成的mht文件

6.8.7 限制条件

目标网页地址可访问

6.8.8 测试计划

目标网页地址不可访问情况

目标mht文件已经存在且是只读的情况

磁盘只读的情况

6.8.9 尚未解决的问题

若保存mht文件途中出现网络闪断,将无法控制取消操作。

6.9 bool WinStillHere()设计说明

6.9.1 程序描述

判断目标网页是否可操作

6.9.2 功能

通过判断当前VCL控件是否Internet Explorer_Server类、当前VCL控件是否仍然存在来判断目标网页是否仍然可操作。

6.9.3 输入项

拖动图标到VCL控件时候检测到的是否Internet Explorer_Server类的标记

当前VCL控件句柄

6.9.4 输出项

布尔值

相关主题
文本预览
相关文档 最新文档