2

这是问题:

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

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

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

顺便说一句,我不知道这是否重要,但我正在搜索的页面来自 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 每个页面都会多次启动此事件,所以我认为这是每次加载框架时,即使我没有赶上我正在寻找的那个。如果没有,捕获帧内容的事件是什么?

我想要做的是在精确的框架上检测一些精确的信息,然后保存它。稍后,某个用户操作触发了一个网页加载,我需要从解析框架中获得的信息。

4

3 回答 3

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
}

高温高压

于 2008-12-04T17:55:43.250 回答
0

你在使用某种线程吗?在单独的线程中运行浏览器确实会搞砸事情。尝试在 STAThread 中执行它并检查是否得到正确的结果。

于 2008-11-27T17:23:08.387 回答
0

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

您能描述一下您要完成的工作吗?

于 2008-12-01T19:59:29.553 回答