2013-04-12 42 views
11

我是ASP.NET和C#項目的一部分。我們正在努力使我們的asp.net門戶Google搜索引擎友好(https://developers.google.com/webmasters/ajax-crawling/)。我們網站中的網頁是動態生成的,DOM使用JavaScript進行修改,因此當Google搜索引擎發送請求時,我們使用NHTML生成快照(服務器端)。它生成HTML快照,但問題是當頁面中存在腳本錯誤時,它返回部分呈現的頁面(部分呈現由頁面JavaScript修改的內容)。頁面在瀏覽器中完美工作。有沒有辦法強制NHTMLUNIT忽略頁面JavaScript錯誤並繼續執行腳本?

我嘗試以下選項

ThrowExceptionOnScriptError = false, 
ThrowExceptionOnFailingStatusCode = false 

,但沒有運氣。

有沒有辦法強制NHtmlUnit忽略頁面錯誤並繼續執行?

以下是代碼

// Create a webclient. 
    WebClient webClient = new WebClient(BrowserVersion.FIREFOX_17) 
     { 
      ThrowExceptionOnScriptError = false, 
      ThrowExceptionOnFailingStatusCode = false 
     }; 

    webClient.WaitForBackgroundJavaScript(5000); 

    // Load the Page with the given URL. 
    HtmlPage htmlPage = webClient.GetHtmlPage(url); 

    // Return the page for the given URL as Text. 
    return htmlPage.WebResponse.ContentAsString; 

回答

5
// Create a webclient. 
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_17) 
    { 
     JavaScriptEnabled = true 
     ThrowExceptionOnScriptError = false, 
     ThrowExceptionOnFailingStatusCode = false, 
    }; 

webClient.WaitForBackgroundJavaScript(5000); 

HtmlPage htmlPage = webClient.GetHtmlPage(url); 

// Return the page for the given URL as Text. 
return htmlPage.WebResponse.ContentAsString; 

我注意到你沒有啓用JavaScript,對不起,如果我錯了。

+0

我不知道@ RAM的情況,但我得到了我的啓用。事情是,我不確定這是一個[N] HtmlUnit問題,而不是一個jQuery問題,因爲它運行在一個無頭瀏覽器中。它可能取決於HtmlUnit沒有提供的東西(比如窗口對象,或者瀏覽器本身提供的其他東西)。 – Allov

+0

是的,我啓用了JavaScript。頁面中的JavaScript代碼會引發異常,導致NHTMLUNIT停止執行,從而使頁面部分呈現。相同的JavaScript在瀏覽器中工作並呈現整個頁面。 – RAM

相關問題