WEB开发网
开发学院软件开发VC DOM应用---遍历网页中的元素 阅读

DOM应用---遍历网页中的元素

 2006-07-22 22:56:47 来源:WEB开发网   
核心提示: <3> 首先取得子框架的总数目 IHTMLFramesCollection::get_length(),接着就可以循环调用 IHTMLFramesCollection::item()函数一个一个地取得子框架 IHTMLWindow2 指针,DOM应用---遍历网页中的元素(4)

<3> 首先取得子框架的总数目 IHTMLFramesCollection::get_length(),接着就可以循环调用 IHTMLFramesCollection::item()函数一个一个地取得子框架 IHTMLWindow2 指针,然后转第<1>步。

<4> 一个文档中可能拥有多个表单,因此还是同样的道理,先要取得表单的集合(IHTMLElementCollection,其实这个不光是表单的集合,其他元素的集合,比如图片集合也是用它)。这个操作也很简单,取得属性 IHTMLDocument2::get_forms()。

<5> 属性 IHTMLElementCollection::get_length() 得到表单总数目,就可以循环取得每一个表单指针了 IHTMLElementCollection::item()。

<6> 在第<5>步中的item()函数,得到的是一个IDispatch的指针,你通过QueryInterface()查询,就可以得到 某类型输入的指针,代码如下: // 假设 spDisp 是由IHTMLElementCollection::item() 得到的 IDispatch 指针
CComQIPtr < IHTMLInputTextElement >   spInputText(spDisp);
CComQIPtr < IHTMLInputButtonElement >  spInputButton(spDisp);
CComQIPtr < IHTMLInputHiddenElement >  spInputHidden(spDisp);
......
if ( spInputText )
{
  //如果是文本输入表单域
}
else if ( spInputButton )
{
  //如果是按纽输入表单域
}
else if ( spInputHiddent )
{
  //如果是隐藏输入表单域
}
else if ........  //其它输入类型
  上面的方法,由于使用具体类型的接口指针,因此程序的效率比较高。但是通过 QueryInterface 接口查询,然后再进行条件判断显然是比较烦琐的,所以这个方法适合于特定的已知网页设计内容的程序。在示例程序中,我则是直接使用 IDispatch 接口进行操作的,这个方式执行起来稍微慢一些,但程序比较简单。主要代码和说明如下:#include < atlbase.h >
CComModule _Module;  // 由于需要使用 CComDispatchDriver 的 IDispatch 包装类ATL智能指针,所以这个是必须的
#include < atlcom.h >
......
long nElemCount=0;    //表单域的总数目
spFormElement->get_length( &nElemCount );
for(long j=0; j< nElemCount; j++)
{
  CComDispatchDriver spInputElement;  // IDispatch 的智能指针
  spFormElement->item( CComVariant( j ), CComVariant(), &spInputElement );
  CComVariant vName,vVal,vType;  // 域名称,域值,域类型
  spInputElement.GetPropertyByName( L"name", &vName );
  spInputElement.GetPropertyByName( L"value",&vVal );
  spInputElement.GetPropertyByName( L"type", &vType );
  // 使用 IDispatch 的智能指针的好处就是:象上面这样读取、设置属性很简单
  // 另外调用 Invoke 函数也异常方便,Invoke0(),Invoke1(),Invoke2()....
  ......
}
四、结束语

示例程序在 VC6 下编译执行通过。运行方法:随便启动几个 IE 浏览网页,最好是有表单输入的网页。然后执行示例的 EXE 程序即可。到这里,就到这里了......祝大家学习快乐 ^-^

上一页  1 2 3 4 

Tags:DOM 应用 遍历

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接