2013-04-12 8 views
11

Ich bin Teil von ASP.NET und C# -Projekt. Wir versuchen, unser asp.net Portal Google suchmaschinenfreundlich zu machen (https://developers.google.com/webmasters/ajax-crawling/). Webseiten auf unserer Website werden dynamisch generiert und das DOM wird mit JavaScript geändert. Daher verwenden wir NHTML, um den Snapshot (serverseitig) zu generieren, wenn die Google-Suchmaschine die Anfrage sendet. Es erzeugt den HTML-Snapshot, aber das Problem liegt vor, wenn auf der Seite ein Skriptfehler vorliegt, wird eine teilweise gerenderte Seite zurückgegeben (der Inhalt, der von der JavaScript-Seite der Seite geändert wird, wird teilweise gerendert). Seiten funktionieren perfekt in Browsern.Gibt es eine Möglichkeit, NHTMLUNIT zu Ignorieren JavaScript-Fehler zu ignorieren und Skriptausführung fortzusetzen?

habe ich versucht, die folgenden Optionen

ThrowExceptionOnScriptError = false, 
ThrowExceptionOnFailingStatusCode = false 

aber kein Glück.

Gibt es eine Möglichkeit, NHtmlUnit zu zwingen, Seitenfehler zu ignorieren und die Ausführung fortzusetzen?

finden Sie den Code

// 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; 

Antwort

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; 

ich bemerkt, dass Sie JavaScript nicht aktiviert, sorry, wenn ich falsch bin.

+0

Ich weiß nicht über @ RAM-Fall, aber ich habe meine aktiviert. Die Sache ist, ich bin mir nicht sicher, dass es ein [N] HtmlUnit-Problem und nicht ein jQuery-Problem ist, da es in einem Headless-Browser läuft. Es hängt möglicherweise von etwas ab, das HtmlUnit nicht bereitstellt (wie das Fensterobjekt oder etwas anderes, das der Browser selbst bereitstellen würde). – Allov

+0

Ja, ich habe JavaScript aktiviert. JavaScript-Code in der Seite löst eine Ausnahme aus, die bewirkt, dass NHTMLUNIT die Ausführung stoppt, sodass die Seite teilweise gerendert wird. Das gleiche JavaScript funktioniert in Browsern und rendert die komplette Seite. – RAM

Verwandte Themen