Hunter的大杂烩 技术学习笔记

October 30, 2013

c# webbrowser判断页面加载完毕淫计

Filed under: 技术话题 — hunter @ 10:28 pm

Webbrowser 控件的DocumentCompleted事件,对于异步加载的页面判断不是很靠谱,这个事件基本无法获得ajax加载完毕的时间点,所以会导致用读取document中的html时,数据还未加载完毕的可能。

我的做法是:

1. 等页面框架加载完毕后,调用execScript方法,将原页面中,在加载完毕后执行的某个js函数置换掉 (javascript中函数名称跟函数指针差不多)

下面这个 icfReplFunc 函数,把原来 dosomething_org 函数替换为我的 icfInJection(),在 icfInJection() 内部再调用原来的 dosomething_org 函数
String newScript = ” function icfInJection() { cc();window.external.ajaxLoadComplete(); } function icfReplFunc(){  cc=dosomething_org; dosomething_org=icfInJection; window.status=’replaced’;} icfReplFunc();”;
IHTMLWindow2 win = (IHTMLWindow2)webBrowser1.Document.Window.DomWindow;
win.execScript(newScript, “Javascript”);
2. 触发页面(模拟click)中数据加载动作;

3. 数据加载完毕后,会调用 dosomething_org(), 而实际上调用的是我注入的 icfInJection()
4. 在 icfInJection 函数中,运行“window.external.ajaxLoadComplete()”,触发c# 程序里面的 ajaxLoadComplete(), 告诉C#程序,数据加载完毕了,可以进行页面元素分析

No Comments

No comments yet.

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

Powered by WordPress