最近有個(gè)小程序需要采集網(wǎng)頁(yè)源代碼,但有的網(wǎng)頁(yè)中JS腳本又會(huì)生成額外的代碼,比如http://www.cnblogs.com/lidabo/p/4169396.html

平面設(shè)計(jì)培訓(xùn),網(wǎng)頁(yè)設(shè)計(jì)培訓(xùn),美工培訓(xùn),游戲開發(fā),動(dòng)畫培訓(xùn)

 

紅框部分便是另外加載的代碼。

 

平面設(shè)計(jì)培訓(xùn),網(wǎng)頁(yè)設(shè)計(jì)培訓(xùn),美工培訓(xùn),游戲開發(fā),動(dòng)畫培訓(xùn)

 

此處可以看到web前端是有 "操作系統(tǒng)" 幾個(gè)字的,但查看網(wǎng)頁(yè)源代碼之后卻搜不到這幾個(gè)字

平面設(shè)計(jì)培訓(xùn),網(wǎng)頁(yè)設(shè)計(jì)培訓(xùn),美工培訓(xùn),游戲開發(fā),動(dòng)畫培訓(xùn)

C#有個(gè)webbrowser控件可以等網(wǎng)頁(yè)加載完之后獲取瀏覽器上所有的網(wǎng)頁(yè)源代碼(也包括額外被JS加載進(jìn)來(lái)的代碼)

【第一次】試驗(yàn)

WebBrowser webBrowser1 = new WebBrowser();

 

private void button1_Click(object sender, EventArgs e)
{

  webBrowser1.Navigate("http://www.cnblogs.com/lidabo/p/4169396.html");

  //加載完畢后觸發(fā)事件webBrowser1_DocumentCompleted
  webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);

}

 

private void webBrowser1_DocumentCompleted(object sender, EventArgs e)//這個(gè)就是當(dāng)網(wǎng)頁(yè)載入完畢后要進(jìn)行的操作
{

  //將webBrowser顯示的代碼傳入richTextBox以便調(diào)試

  richTextBox1.Text = webBrowser1.DocumentText;

}

 

結(jié)果:webbrowser加載完這個(gè)頁(yè)面之后,richTextBox1.Text獲取的代碼里面找不到  "操作系統(tǒng)"  幾個(gè)字 , 獲取的代碼有1063行

網(wǎng)頁(yè)在加載的過(guò)程中,webBrowser1_DocumentCompleted可能會(huì)觸發(fā)一次以上,且相同網(wǎng)頁(yè)可能觸發(fā)次數(shù)不盡相同

有的網(wǎng)頁(yè)會(huì)多次觸發(fā)webBrowser1_DocumentCompleted,騰訊網(wǎng)http://www.qq.com觸發(fā)了4次

 

【第二次】試驗(yàn)

public int i;//設(shè)置全局變量i

private void webBrowser1_DocumentCompleted(object sender, EventArgs e)
{

  i++;//以便觀察這個(gè)事件被觸發(fā)了多少次

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式