如何使用mshtml获取框架的内容?

时间:2008-11-27 16:54:36

标签: parsing frames mshtml

问题在于:

我在IE中有一个钩子,它会对WebBrowser.OnNavigateComplete2事件做出反应,以解析文档的内容以获取一些准确的信息。

该文档包含框架,因此我查看了HTMLDocument.frames。对于每一个,我查看document.body.outerHTML属性来检查内容。

问题是,我正在寻找的字符串从未在那里显示,而它显示在结局页面中。那么,我在找错了地方吗?如果在页面完全加载时显示,那么它会在某个时候下载,对吗?但是我应该看哪个对象?

BTW,我不知道这是否有任何重要性,但我正在搜索的页面来自ASP.NET应用程序。

public void OnNavigateComplete2(object pDisp, ref object url)
{
    document = (HTMLDocument)webBrowser.Document;

    mshtml.FramesCollection frames = document.frames;
    for (int i = 0; i < frames.length; i++)
    {
        object refIdx = i;
        IHTMLWindow2 frame = (IHTMLWindow2)frames.item(ref refIdx);
        string frameContent = frame.document.body.outerHTML;
    }
}

感谢您的帮助。


@rams 每个页面都会多次启动此事件,因此我认为每次加载框架时,即使我没有抓住我正在寻找的那个。如果没有,捕获帧内容的事件是什么?

我想要做的是检测精确帧的精确信息,然后保存。之后,某个用户操作会触发一个网页加载,我需要从解析框架中获取的信息。

3 个答案:

答案 0 :(得分:2)

您知道要查找内容的框架的名称/ ID吗?如果是这样,在您的navigateComplete2事件中,您是否可以获得对该框架的引用,如

iFrame frm = document.frames(<your frame id>);

int readyState=0;

while(frm.readystate !=4){
// do nothing. be careful to not create an endless loop
}

if(frm.readyState==4){
   // get your content now
}

HTH

答案 1 :(得分:0)

您使用某种线程吗?在一个单独的线程中运行浏览器真的搞砸了。尝试在STAThread中执行它并检查是否得到了正确的结果。

答案 2 :(得分:0)

您的字符串未显示的原因是因为框架。 Web浏览器控件在加载主文档后触发文档导航完成事件。此时,框架尚未请求其来源。在Web浏览器控件解析文档之后,对帧源的请求是问题并下载。

你能描述一下你想要完成的事吗?