用webBrowser控件套了一个a页面(a页面是外网一个页面),当点击开始按钮的时候,会触发页面“更多”事件(此事件为Ajax请求),页面会加载最新数据,当加载完最新数据后把webBrowser1.DocumentStream流写入到我本地磁盘一个b页面,然后去浏览b页面内容,但b页面内容是a页面第一次加载的内容,并没有获取到“点击更多”后最新数据内容。把webBrowser1.DocumentStream流写入html文件的代码如下:
1
2
3
4
5
6
7
8
|
Encoding encoding = Encoding.GetEncoding(webBrowser1.Document.Encoding); string path = "c:\\b.html" ; StreamReader sr = new StreamReader(webBrowser1.DocumentStream, encoding); StreamWriter sw = new StreamWriter(path); sw.Write(sr.ReadToEnd()); sw.Flush(); sw.Close(); sr.Close(); |
1
2
3
4
5
6
|
byte [] _HtmlByte = new byte [webBrowser1.Document.Body.OuterHtml.Length]; webBrowser1.DocumentStream.Position = 0; webBrowser1.DocumentStream.Read(_HtmlByte, 0, _HtmlByte.Length); FileStream _FileStream = new FileStream( @"C:\b.html" , System.IO.FileMode.Create); _FileStream.Write(_HtmlByte, 0, _HtmlByte.Length); _FileStream.Close(); |
注:以上两种方式只能获取到webBrowser1第一次加载的内容
然后尝试用File.WriteAllText(@"C:\b.html", webBrowser1.Document.Body.OuterHtml, Encoding.Unicode)这种方式,这种方式虽然获取到了webBrowser最新内容(也就是a页面最新内容),但页面显示样式是错乱的,图片也看不见(webBrowser1.Document.Body.OuterHtml获取的只是一个string字符串,而不是流的方式;如果以webBrowser1.DocumentStream流的方式写入,浏览本地磁盘页面样式是完整的,图片也能看见)。
本人想以流的方式写入到一个html页面,但webBrowser1.DocumentStream流不是最新内容,希望各位大侠帮下忙,看有什么好的办法没有,在此先感谢大家了!~
兄弟,你的想法貌似没说明确,且做法存在问题。首先,你是只是想获取b页面的html么?如果是的话,那么你现在获取到的就是正确的。如果是想做相当于浏览器把整个网页另存为的做法的话,那么就不正确了。你需要获取b页面的所有样式地址,js链接地址。图片地址并都保存下来,这样整个页面就ok啦
"更多"加载完后,
调 File.WriteAllText(@"C:\b.html", webBrowser1.DocumentText, Encoding.Unicode)保存为文件
然后读取b.html文件的流
webBrowser1.DocumentStream = b.html的文件流