问题在于:
我在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 每个页面都会多次启动此事件,因此我认为每次加载框架时,即使我没有抓住我正在寻找的那个。如果没有,捕获帧内容的事件是什么?
我想要做的是检测精确帧的精确信息,然后保存。之后,某个用户操作会触发一个网页加载,我需要从解析框架中获取的信息。
答案 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浏览器控件解析文档之后,对帧源的请求是问题并下载。
你能描述一下你想要完成的事吗?