有些服务器禁止了 WebRequest、WebClient 抓取网页,这时可用 WebBrowser 控件。
触发顺序
先触发 Navigated、再触发 DocumentCompleted。
哪个能获取 WebBrowser 的 Document、DocumentText 和 DocumentStream 属性?
根据微软的说法,都能够获取。但根据我的测试,如果网页复杂,比如 iframe 多、HTML 长,那么只有在 DocumentCompleted 且 WebBrowser 的 ReadyState 为 Complete(即整个网页加载完)时,才能够获取完整的 HTML。
如何获取 gb2312 编码的网页 HTML?
因为 .NET 是 UTF-8 的,所以对 gb2312 编码的网页,用 DocumentText 取出来是乱码,我再试了,根据 Encoding 对 DocumentText 转换编码,仍然是乱码,用下面的方式解决:
网页有 iframe 框架,是否会多次触发?
会,两个事件都会,通过事件参数 e.Url 可以判断是主网页触发的还是 iframe 触发的。
网页有 iframe 框架,每次触发 Navigated、DocumentCompleted 时,其 DocumentText 是主网页的,还是 iframe 框架网页的?
主网页的。
网页无 iframe 时事件是如何触发的?
其中 Complete 表示当前 WebBrowser 的 ReadyState。
网页有 iframe 时事件是如何触发的?
其中 Interactive、Complete 表示当前 WebBrowser 的 ReadyState。
可以看出:框架网页触发时,DocumentCompleted 的 ReadyState 为 Interactive;整个网页加载完成触发时,ReadyState 为 Complete。
相关阅读