求高人,IHTMLElement如何获得元素的Attribute值

Afterwards_ 2012-08-05 07:12:30
IHTMLElement::getAttribute可以么?
网页代码如下
<a class="J_MemoFlag memo-flag" data-orderid="149725257706392" target="_blank" href="网页地址" title="" data-spm-anchor-id="a1z09.1.11.6" data="暂时没有备忘信息">
</a>

比如获取 data-orderid的值 target的值 data的值 以及 anchor-id 的值 等等
...全文
919 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
DrSmart 2012-09-28
  • 打赏
  • 举报
回复
楼主不是牛逼,是结帖率异常的高,116%什么情况
看不见的裂痕 2012-08-06
  • 打赏
  • 举报
回复
楼主非常不错,懂得分享,还写经验帖,赞一个。
Gloveing 2012-08-06
  • 打赏
  • 举报
回复
LZ 牛X
Afterwards_ 2012-08-05
  • 打赏
  • 举报
回复
自己搞定了

按照如上的网页代码,首先,使用IID_IHTMLElementCollection集合的指针对像,先得到一个指定类型的元素数目,然后进入一个for循环,遍历所有IHTMLElement,遍历方式为
pEleColTags->item(CComVariant(i), CComVariant(), &pDistmp);

i为循环的自增变量,
这里值得一提的是,item函数并不是一定要填写的像他的参数说明一样,他让写的是VARIANT类型的name 实际上我们可以填入数字 以此来告知他查找item的方式是按照序号来查找.而不是一定要填写HTML源码中的name=XXX的这个name

新手注意 虽然我也是新手.

以上可以得到这个关于 <a> 标签的集合
然后用IID_IHTMLElementCollection的标签集指针对象,得到这个集合内元素的数目,然后便利一次他们的class名称.也就是用 IHTMLElement的get_classname,其实这一步可以省去,只是在我们debug跟踪的时候,方便找到所需要的信息.否则便利整个集合,是很麻烦的.

我们得到的这个类的名称以后 就可以调用IHTMLElement的get_outerHTML来跟踪一下你的网页源码了.
为什么要做这一步,是因为有的时候你通过浏览器或者其他工具获取的网页元素或代码 不一定准确.
本段代码中 我们提到的 data="暂时没有备忘信息" 实际上就是在outerHTML里面得不到的.所以我们有必要通过得到的网页代码看一下IHTMLElement所能识别到的元素.

筛选完以后 我们就可以根据getAttribute来获得指定属性的值了.
之前我就是在这里遇到的问题,CSDN也看到了同样的问题的朋友.说一直返回的都是NULL
查阅google英文站,看到很多外国编程者也遇到了同样问题,其实这里是我们忽略了一个细节,那就是给VARIANT 做一个初始化
VARIANT vtValue;


vtValue.bstrVal = SysAllocString(NULL);
vtValue.vt = VT_BSTR;

如不做此步骤,指针错误,类型错误,转换到CSTRING类还错误,中断,等等等...问题一堆.

至此,各种类型元素的获取已经都拿下了.接下来研究个个元素之间的关系.现在有点感觉这些元素的关系应该也像是XML脚本一样吧.

关于这个 data="暂时没有备忘信息",也是接下来研究的内容之一.

希望对各位有所帮助

3,055

社区成员

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

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