MSHTML如何获取一个网页元素对象

ITDeng 2012-08-10 08:43:42
代码如下,但是获取出的好像不对

//获取IHTMLDocument2
IHTMLDocument2 *pDoc2;
IHTMLFramesCollection2 *pFc2;
HWND hIE = (HWND)hWnd;
UINT msg = RegisterWindowMessage(TEXT("WM_HTML_GETOBJECT"));
DWORD_PTR Res;
SendMessageTimeout(hIE,msg,NULL,NULL,SMTO_ABORTIFHUNG,1000,&Res);
HRESULT hres = ObjectFromLresult(Res,IID_IHTMLDocument2,NULL,(void **)&pDoc2);

IHTMLElementCollection *pEc;
IHTMLElement *pE;
IDispatch *pDis;
IHTMLTable * pT;
VARIANT varindex,varname;
long len;
BSTR bstr;
VariantInit(&varindex);
VariantInit(&varname);
varindex.vt = VT_I4;
pDoc2->get_all(&pEc); //pDoc2是IHTMLDocument2
pEc->get_length(&len);
for(long i = 0;i < len;++i)
{
varindex.lVal = i;
pEc->item(varname,varindex,&pDis);
pDis->QueryInterface(IID_IHTMLElement,(void **)&pE);
pE->get_innerHTML(&bstr);
pE->Release();
pDis->Release();
}
//long p;
//pEc->get_length(&p);
//pEc->tags(CComVariant("table"),&pDis);
//pDis->QueryInterface(IID_IHTMLTable,(void **)&pT);

//pT->Release();

pEc->Release();


请问大家,怎么获取我想要的一个元素呢,例如名为xx的一个span元素
获取所有元素好像是pDoc2->get_all(&pEc);
如果获取span的集合怎么获取呢是不是pEc->tags(CComVariant("span"),&pDis);这样?
我还想获取到了之后修改span的内容,请问是哪个函数?谢谢
...全文
893 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
找到了 分享一下呀 大家互相学习嘛
ITDeng 2012-08-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

IHTMLElement有很多put_XXX的接口,就是修改了。
[/Quote]
谢谢,已经找到了
饿半肚 2012-08-14
  • 打赏
  • 举报
回复
IHTMLElement有很多put_XXX的接口,就是修改了。
ITDeng 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

pFc2->all.item(index)

这样看看
[/Quote]
不好意思,已经能遍历元素并获取到元素的代码了,不过怎么修改元素的代码呢?
傻X 2012-08-10
  • 打赏
  • 举报
回复
pFc2->all.item(index)

这样看看
ITDeng 2012-08-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

一个非常普遍的集合对象是all集合对象。all集合对象是通过使用IHTMLDocument2::all 方法获得的。 这个方法返回一个包含文档的所有元素的IHTMLElementCollection接口。然后你可以使用IHTMLElementCollection::item方法枚举元素。 IHTMLElementCollection::item方法为你提供一个可以用于调用QueryInterfa……
[/Quote]
我现在就是这样做的,可是,IHTMLDocument2没有all只有get_all
				pEc->get_length(&len);
for(long i = 0;i < len;++i)
{
//varindex.lVal = i;
pEc->item(CComVariant(),CComVariant(i),&pDis);
pDis->QueryInterface(IID_IHTMLElement,(void **)&pE);
pE->get_innerHTML(&bstr);
OutputDebugString(bstr);
OutputDebugString(TEXT("\n"));
pE->Release();
pDis->Release();
}

可是每次输出的数据都是一样的,都输出
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
傻X 2012-08-10
  • 打赏
  • 举报
回复
一个非常普遍的集合对象是all集合对象。all集合对象是通过使用IHTMLDocument2::all 方法获得的。 这个方法返回一个包含文档的所有元素的IHTMLElementCollection接口。然后你可以使用IHTMLElementCollection::item方法枚举元素。 IHTMLElementCollection::item方法为你提供一个可以用于调用QueryInterface,请求IID_IHTMLElement的IDispatch指针。这将会返回给你一个你能用来为个别的元素获得或设置信息的IHTMLElement接口指针。

3,055

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC HTML/XML
社区管理员
  • HTML/XML社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧