今天在博客上看到有人提到WebBrowser延迟读取DocumentText,在google上查了一下,没有这方面的信息,哪位高手给解释一下。请给一个简单代码示例,谢谢。
先明白一个概念,延迟加载:一般指在类实体化例的时候,并没有加载“某一些东西”,而是等到调用的时候,才加载。
简单的说是在类的构造函数里没有实例化或调用其它东西,而是等到调用某个方法时再实例化其它类或调用其它东西。
当你使用webBrowser.Navigate(Url)访问一个网页之后,
立马去取webBrowser.DocumentText基本上是取不到有效内容的.
因为Navigate之后,你请求的网页内容还没有下载完.要等网页内容全部下载完,webBrowser才会给DocumentText属性赋值,之后才会有webBrowser.Document.
也许这个就是你问的:WebBrowser延迟读取DocumentText.
说白了就是页面中有一个标题和一个div容器还有js代码,用户浏览时先看到标题,页面加载完自动执行了js代码,js又去调用服务端数据将文章内容取回,并显示在div容器中。而不是页面本来在div中就有文章内容。
使用这种方法的原因有很多,一是可以屏蔽爬虫的抓取,二是不必有一点修改就重新生成所有静态页面数据,三是有较好的用户体验,让用户先看到重要的内容,不重要的延迟读取可以加快其他内容的显示速度。
弊端呢,一是ajax接口可能被人滥用,二是request请求增多,三是编程调试难度增大。
也有可能是楼上的说法。
因为提交请求和相应需要时间来完成这一过程嘛,当你navigate(url)之后不可能马上就能得到完整的DocumentText,那需要文档加载完毕才能拿到,所以你要在documentcomplete事件里面去获取DocumentText。但是如果有几个frame的话每加载完一个frame就会执行一次事件,所以你也需要判断frame是不是你需要的,这个可以通过url或者文档内容区判断。
兄弟,还是不行的。
比较这个网站的行情数据:
http://finance.sina.com.cn/money/globalindex/index.shtml
用webbrowser加载完成后在源文件中还是不能得到。