2016-04-12 10 views
0

Ich bin irgendwie verzweifelt hier. Seit ein paar Tagen versuche ich, einen Web-Scraper zu erstellen, der unsere Website durchsucht und nach Javascript-Fehlern sucht.Scraping unserer Website auf Javascript-Fehler zu überprüfen

Das große Problem ist, dass ich nur Java kenne und es scheint, dass GhostDriver nicht mehr gepflegt wird. Der Typ von Ghostdriver bezieht sich auf JbrowserDriver. JBrowserDriver hat jedoch keine Möglichkeit, die Javascript-Fehler von der Konsole zu sammeln.

Dann versuchte ich HTMLUnit, die Weg zu eifrig auf Wurf Fehler ist, nicht javascript bezogen. Nachdem ich einen halben Tag damit herumgespielt hatte, warf ich das Handtuch auf HtmlUnit.

Ich könnte zurück zu plain alten WebDriver, aber das würde zu viel Vortex beinhalten.

Hat jemand von euch irgendwelche Vorschläge?

+0

try browsermobproxy mit Selen und dass Sie sollten –

+0

alles geben Selen mit zu viel vorformulierten bedeuten würde ... – Homewrecker

Antwort

1

Sie könnten Javascript in den Kopfbereich jedes Fensters injizieren, um alle Fehler in einem versteckten div zu protokollieren. Selenium konnte dann den Text von diesem Div holen und in einen Bericht über alle Fehler auf der Seite einlesen.

Zum Beispiel angesichts der folgenden Seitenlayout:

<html> 
    <head> 
     <script> 
      window.onerror = function(e) { 
       document.getElementById("hidden-selenium-log").innerText += e.toString() + ";"; 
      } 
     </script> 
    </head> 
    <body> 

     <div id="hidden-selenium-log" style="display: none;"> 
     </div> 

     <div id="broken-button" onclick="unknownFunction()">broken</div> 

    </body> 
</html> 

Das Skript im head Tag würde alle JavaScript-Fehler in den div hidden-selenium-log schreiben. Ein Klick auf das div broken-button würde den Fehlerereignishandler auslösen und ihn im versteckten Selenlog protokollieren.

Nachdem er mit der Seite interagieren, können Sie dann etwas Einfaches wie tun könnte:

Driver.FindElement(By.Id("hidden-selenium-log")).text.split(";"); 

Dies würde den Text in der verborgenen Selen log erhalten und teilen Sie es dann durch das Semikolon, ein Charakter, den ich angehängt nach Jeder Fehler wurde protokolliert.

+0

Ich bin derzeit versucht, ein solcher Ansatz mit JBrowserDriver. Sie können Javascript in den Kopf injizieren und dann aufrufen, wenn die Seite gerendert wird. Bis jetzt ohne Erfolg. – Homewrecker

+0

Welche Art von Problemen begegnen Sie diesem Ansatz? Wird das Javascript einfach nicht aufgerufen? –

+0

I isert und dann führe ich aus: driver.executeScript ("return window.jsErrors"); Aber ich bekomme NULL zurück und bin mir sicher, dass auf der Seite ein Javascript-Fehler ist. – Homewrecker

0

Die Protokollierung von JavaScript ist standardmäßig deaktiviert. Sie können es über den Settings Builder aktivieren.

Settings settings = Settings.builder() 
     .logJavascript(true) 
     .build(); 
JBrowserDriver jBrowserDriver = new JBrowserDriver(settings); 

jBrowserDriver.get("http://example.com"); 

Logs logs = jBrowserDriver.manage().logs(); 
LogEntries logEntries = logs.get("javascript"); 
logEntries.forEach(System.out::println); 
Verwandte Themen