怎样取得WebBrowser中网页的HTML源码?(100分)

  • 主题发起人 主题发起人 skyweb
  • 开始时间 开始时间
S

skyweb

Unregistered / Unconfirmed
GUEST, unregistred user!
已经知道的办法是:<br>通过取得WebBrowser的IHtmlDocument2界面,找到&lt;html&gt;对应的IHtmlElement界面,<br>然后用IHtmlElement.outerHtml。伪代码如下:<br>&nbsp; Text:=(WebBrowser1.Document as IHtmlDocument2).all.item('HTML',0).outerHtml;<br>但是这种方式得到的并非原始的Html文本,而是被IE Cook过的,“熟了”的Html文本,<br>跟在网页上按右键然后“查看源文件”得到的Html文本在格式上完全不一样,虽然在显示<br>效果上是等效的。<br>这不是我想要的答案!<br>我想要的,就是网页上按右键然后“查看源文件”得到的原始文本:)<br>
 
你是想要 ASP 的源文件?这样当然不行了,当然是服务器先 "Cook" 过的<br>到了你机器上肯定就是已经熟了的,想要生的,在服务器上打主意 :-)
 
to beta:<br>我并不想是要ASP的源码,而是IE浏览网页时得到的最初的HTML代码:)。<br>一个最简单的情况比如用IE打开一个本地的HTML文件,然后按我前面<br>说的办法取得HTML源码,其结果与原来的HTML文件内容并不完全一样,<br>其内容已经被IE重新整理和排列过了,也就是我说的“Cook”过了:)<br>所以我说的是被IE Cook过了,没有说是被服务器Cook过了:)
 
Text:=(WebBrowser1.Document as IHtmlDocument2).body.outerHtml
 
to kthy: <br>&nbsp; Text:=(WebBrowser1.Document as IHtmlDocument2).body.outerHtml<br>只能取到&lt;body&gt;和&lt;/body&gt;以内的内容,不包括&lt;head&gt;节以及其它的内容。<br><br>比如我有一个文件名abc.htm,内容如下:<br>&lt;!-- &lt;Html&gt;之外的内容,会被IE Cook掉! --&gt;<br>&lt;html&gt;<br>&lt;head&gt; &lt;title&gt;My Title&lt;/title&gt; &lt;/head&gt;<br>&lt;body&gt;<br>&lt;p&gt;<br>&lt;b&gt;My body&lt;/b&gt; Text!&lt;h1&gt; Hello! Can you here me???&lt;/h1&gt;<br>&lt;!-- 测试用的注释 --&gt;<br>&lt;/p&gt;<br>&lt;/body&gt;<br>&lt;/html&gt;<br><br>如果用<br>&nbsp; Text:=(WebBrowser1.Document as IHtmlDocument2).all.item('HTML',0).outerHtml;<br>得到的结果如下:<br><br>&lt;HTML&gt;&lt;HEAD&gt;&lt;TITLE&gt;My Title&lt;/TITLE&gt;&lt;/HEAD&gt;<br>&lt;BODY&gt;<br>&lt;P&gt;&lt;B&gt;My body&lt;/B&gt; Text!<br>&lt;H1&gt;Hello! Can you here me???&lt;/H1&gt;&lt;!-- 测试用的注释 --&gt;<br>&lt;P&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;<br><br>跟我原来的文件内容,排版格式,字符大小写等都不同了。虽然显示效果是一样的。还有就是Html节之外的内容被丢掉了。<br><br>而用Text:=(WebBrowser1.Document as IHtmlDocument2).body.outerHtml的话,<br>将得到:<br><br>&lt;BODY&gt;<br>&lt;P&gt;&lt;B&gt;My body&lt;/B&gt; Text!<br>&lt;H1&gt;Hello! Can you here me???&lt;/H1&gt;&lt;!-- 测试用的注释 --&gt;<br>&lt;P&gt;&lt;/P&gt;&lt;/BODY&gt;<br><br>&lt;body&gt;节之外的内容都被丢掉了。<br><br><br>而我想要通过TWebBrowser得到的,是最初的这一段:<br><br>&lt;!-- &lt;Html&gt;之外的内容,会被IE Cook掉! --&gt;<br>&lt;html&gt;<br>&lt;head&gt; &lt;title&gt;My Title&lt;/title&gt; &lt;/head&gt;<br>&lt;body&gt;<br>&lt;p&gt;<br>&lt;b&gt;My body&lt;/b&gt; Text!&lt;h1&gt; Hello! Can you here me???&lt;/h1&gt;<br>&lt;!-- 测试用的注释 --&gt;<br>&lt;/p&gt;<br>&lt;/body&gt;<br>&lt;/html&gt;<br><br>呵呵,问题有点难度,大家加油啊~~
 
问题有点繁但不难!我做过!
 
很简单牙.<br>procedure TForm1.SaveHTMLSourceToFile(const FileName: string; &nbsp;<br>&nbsp; WB: TWebBrowser); &nbsp;<br>var &nbsp;<br>&nbsp; PersistStream: IPersistStreamInit; &nbsp;<br>&nbsp; FileStream: TFileStream; &nbsp;<br>&nbsp; Stream: IStream; &nbsp;<br>&nbsp; SaveResult: HRESULT; &nbsp;<br>begin &nbsp;<br>&nbsp; PersistStream := WB.Document as IPersistStreamInit; &nbsp;<br>&nbsp; FileStream := TFileStream.Create(FileName, fmCreate); &nbsp;<br>&nbsp; try &nbsp;<br>&nbsp; &nbsp; Stream := TStreamAdapter.Create(FileStream, soReference) as IStream; &nbsp;<br>&nbsp; &nbsp; SaveResult := PersistStream.Save(Stream, True); &nbsp;<br>&nbsp; &nbsp; if FAILED(SaveResult) then &nbsp;<br>&nbsp; &nbsp; &nbsp; MessageBox(Handle, 'Fail to save HTML source', 'Error', 0); &nbsp;<br>&nbsp; finally &nbsp;<br>&nbsp; &nbsp; { we are passing soReference in TStreamAdapter constructor, &nbsp;<br>&nbsp; &nbsp; &nbsp; it is our responsibility to destroy the TFileStream object. } &nbsp;<br>&nbsp; &nbsp; FileStream.Free; &nbsp;<br>&nbsp; end; &nbsp;<br>end; &nbsp;<br><br>pocedure TForm1.Button1Click(Sender: TObject); &nbsp;<br>begin &nbsp;<br>&nbsp; if SaveDialog1.Execute then &nbsp;<br>&nbsp; &nbsp; SaveHTMLSourceToFile(SaveDialog1.FileName, WebBrowser1); &nbsp;<br>end; &nbsp;<br>
 
其实方法很多,用memo也可以得到你要的webbrowser的源码。请看:<br>1。你先把webbrowser的网页文件保存到本地!如保存到本地的'c:/test.htm'<br>2。用memo控件<br>&nbsp; &nbsp;memo1.loadfromfile('c:/test.htm');就可以得到你要的东西了。 :)
 
呵呵,知则易,不知则难!:)<br>谢谢www,问题解决了:)
 
多人接受答案了。
 
后退
顶部