我正在尝试获取Internet Explorer Web浏览器窗口的文本内容。
我正在遵循以下步骤:
编辑
我的问题是
我尝试了一种递归方法,但我对如何处理这样的场景毫无头绪,
<div>
Hello World 1
<div style="display: none">Hello world 2</div>
</div>
在这种情况下,我无法获得“Hello World 1”
任何人都可以帮助我找到从IHTMLDocument2 *获取文本的最佳方法。 我使用的是C ++ Win32,没有MFC,ATL。
谢谢, 与Ashish。
答案 0 :(得分:6)
如果你在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
的每个元素的父元素。