ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

c – 从IHTMLDocument2 *获取页面上的可见文本

2019-08-26 12:08:09  阅读:299  来源: 互联网

标签:ole mshtml c winapi html-parsing


我试图获取Internet Explorer Web浏览器窗口的文本内容.

我遵循以下步骤:

>获取指向IHTMLDocument2的指针
>从IHTMLDocument2我获取身体作为IHTMLElement
 3.在身体上我调用get_innerText

编辑

>我获得了身体的所有孩子,并尝试对所有IHTMLElements进行递归调用
>如果我得到任何不可见的元素,或者如果我得到一个标签为script的元素,我会忽略该元素及其所有子元素.

我的问题是

>以及在页面上可见的文本我也获得了具有哪种style =“display:none”的内容
>对于google.com,我还会获得javascript以及文本.

我尝试了一种递归方法,但我对如何处理这样的场景毫无头绪,

<div>
Hello World 1
<div style="display: none">Hello world 2</div>
</div>

在这种情况下,我将无法获得“Hello World 1”

任何人都可以帮助我以最好的方式从IHTMLDocument2 *获取文本.
我使用的是C Win32,没有MFC,ATL.

谢谢,
阿希什.

解决方法:

如果你在document.body.all元素上向后迭代,你将始终走出里面的元素.所以你不需要自己走路递归. DOM会为你做到这一点.例如(代码在Delphi中):

procedure Test();
var
  document, el: OleVariant;
  i: Integer;
begin
  document := CreateComObject(CLASS_HTMLDocument) as IDispatch;
  document.open;
  document.write('<div>Hello World 1<div style="display: none">Hello world 2<div>This DIV is also invisible</div></div></div>');
  document.close;
  for i := document.body.all.length - 1 downto 0 do // iterate backwards
  begin
    el := document.body.all.item(i);
    // filter the elements
    if (el.style.display = 'none') then
    begin
      el.removeNode(true);
    end;
  end;
  ShowMessage(document.body.innerText);
end;

侧评:
至于使用递归方法的场景:

<div>Hello World 1<div style="display: none">Hello world 2</div></div>

如果是我们的元素是第一个DIV,el.getAdjacentText('afterBegin')将返回“Hello World 1”.所以我们可以迭代元素并收集getAdjacentText(‘afterBegin’),但这有点困难,因为我们需要测试el.currentStyle.display的每个元素的父元素.

标签:ole,mshtml,c,winapi,html-parsing
来源: https://codeday.me/bug/20190826/1729846.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有