Gibt es eine Möglichkeit für mich, das SVG-Element von einer HTML-Seite gerendert und von JavaScript in Java gerendert, zum Beispiel: http://bl.ocks.org/mbostock/raw/4063269/, die im Fall verwendet d3 ist .js.Abrufen einer SVG dynamisch auf einer Webseite von Java gerendert
Antwort
Wenn Sie versuchen, den SVG-Inhalt als String
zu bekommen, ist Selenium Ihre beste Wahl, wie @chimmi sagte. Sie könnten jedoch ohne ein echtes Browserfenster davonkommen, indem Sie stattdessen PhantomJS verwenden.
In der Theorie sollte es so funktionieren:
System.setProperty("phantomjs.binary.path", "/path/to/phantomjs");
WebDriver driver = new PhantomJSDriver();
// Open your page with SVG
driver.get("http://localhost:8080/svgpage");
// Find the SVG
WebElement svg = driver.findElement(By.tageName("svg"));
// Get its XML content
String xml = svg.getAttribute("outerHTML");
Von hier aus Sie Batik verwenden können, wenn Sie tatsächlich die SVG auf dem Bildschirm in der Nicht-Web-App wollen machen.
Oder, wenn alles, was Sie war zu machen Aussagen über den SVG Inhalte zu Testzwecken wollte, erinnern Sie sich Unterelemente mit normalen CSS oder XPath-Selektoren wählen:
//Select all <path> elements within the SVG
Lis<WebElement> pathElementsInSVG = svg.findElements(By.tagName("path"));
//Assert there is 4 <path>s
assert pathElementsInSVG.size() == 4
Wenn ich Sie richtig verstanden habe, besteht Ihr Problem darin, dass von Ihnen verwendete Werkzeuge (HtmlUnit) nicht mit komplexen JS (d3.js) umgehen können.
In diesem Fall gibt es nichts besseres als einen tatsächlichen Browser zu verwenden. Sie können Selenium verwenden, um Ihre Seite mit einer ferngesteuerten Browser-Instanz zu öffnen und JS HTML von dort zu erhalten.
This tutorial enthält so ziemlich alles, was Sie brauchen. Außer der bekommen html Teil, können Sie es in this SO Antwort finden.
Danach können Sie die HTML zu jedem gewünschten Parser füttern.
EDIT
dachte nur an eine andere Art und Weise, können Sie WebKit Html2Pdf versuchen. Sein Zweck ist das Erstellen von PDF-Dateien, aber es verwendet WebKit unter der Haube und Sie können benutzerdefinierte Skript (wie document.onload Rückruf) injizieren, die SVG-Inhalte zu Ihrem Dienst nach dem Laden der Seite posten wird.
Aber ich würde diese Straße nicht gehen, es hat viele Einschränkungen (im Grunde funktioniert nur für direkte URLs) und insgesamt ist ziemlich durcheinander.
Sie haben die Frage richtig verstanden, htmlunit selbst hat keine JavaScript-Engine. Allerdings hätte ich gerne einen "reinen" Java-Weg, frage mich, ob Rhino oder Nashborn damit umgehen können. –
In diesem Fall sollten Sie Ihren tatsächlichen Fall präsentieren, denn es gibt eine ganze Reihe von Möglichkeiten, und meines Wissens ist keiner von ihnen ideal, also kann Ihnen niemand mit Sicherheit sagen, dass sie für Sie arbeiten werden. – chimmi
- 1. Abrufen bestimmter Informationen von einer Webseite
- 2. Abrufen einer CSV-Datei von der Webseite
- 3. Abrufen des Seitentitels von einer geschabt Webseite
- 4. Abrufen des Miniaturbilds von einer Webseite
- 5. Parsing einer Webseite mit Java
- 6. Wiedergabe von Audiostreams auf einer Webseite
- 7. Javascript: Welche Document Objekt Eigenschaft kann dynamisch gerendert werden, nachdem eine Webseite gerendert wurde?
- 8. Wie Sie Inhalte auf einer Webseite mit Hilfe von Java abrufen können
- 9. Multitasking auf einer Webseite
- 10. Bibtex auf einer Webseite?
- 11. Javascript zum Abrufen des Inhalts einer Webseite?
- 12. Abrufen eines Teils einer Webseite mit urllib
- 13. Wie können Sie Bilder auf einer Webseite dynamisch ändern?
- 14. Objektposition in einer three.js-Szene dynamisch abrufen
- 15. Wie Sie diese Elemente von einer Webseite abrufen können?
- 16. Java-Exe in einer Webseite verarbeiten
- 17. Rendern von SVG-Bildern auf einer Leinwand
- 18. Abrufen einer Datei von einer http-Anfrage in Java
- 19. Verwenden von Registerkarten auf einer Webseite
- 20. Hinzufügen von Live-Wetterbericht auf einer Webseite
- 21. Verschieben von Datenbankeinträgen auf einer einzelnen Webseite
- 22. Formatieren von Code-Snippets auf einer Webseite
- 23. Einbetten von MJPEG-Dateien auf einer Webseite
- 24. Blockieren von HTML-Tags auf einer Webseite
- 25. Identifizieren von Schaltflächenelement auf einer Webseite Selen
- 26. Abrufen einer BitMap von AsyncTask in Java
- 27. Abrufen einer Sammlung von Nachfolgern in Java
- 28. Warum funktioniert diese SVG im Browser, aber nicht auf einer Webseite?
- 29. Neustarten einer Website von einer eigenen Webseite
- 30. dynamische Aktualisierung einer Webseite
einfach hinzufügen, ich habe versucht, HtmlUnit, jsoup und sogar in SWT untersucht, aber ohne Erfolg. Deshalb ist die Frage ziemlich weit gefasst, da ich die Lösung nicht auf ein Werkzeug beschränken möchte. –
Mögliches Duplikat von http://stackoverflow.com/questions/26027313/how-to-load-and-parse-svg-documents? –
@definecindyconst Dies ist nicht das Duplikat von [http://stackoverflow.com/questions/26027313/how-to-load-and-parse-svg-documents], das Parsen von SVG ist einfach. –