有沒有一種方法可以讓我從JavaScript中呈現的Java頁面中呈現和解析SVG元素: ,例如:http://bl.ocks.org/mbostock/raw/4063269/,這種情況下使用d3 .js文件。檢索在Java網頁上動態呈現的SVG
回答
如果你要做的是將SVG內容作爲String
,Selenium是你最好的選擇,就像@chimmi說的那樣。但是,如果沒有通過使用PhantomJS來打開真正的瀏覽器窗口,您可能會離開。
從理論上講,它應該像這樣工作:
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");
從這裏,你可以使用Batik如果要實際呈現在您的非Web應用程序在屏幕上的SVG。
或者,如果你想一切都使上用於測試目的的SVG內容斷言,記住你可以使用普通的CSS或XPath選擇器選擇子元素:
//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
如果我正確地理解了你的問題,你的問題是你使用的工具(HtmlUnit)無法處理複雜的JS(d3.js)。
在這種情況下,沒有比使用實際瀏覽器更好的了。您可以使用Selenium打開您的頁面與遠程控制的瀏覽器實例,並從那裏得到JS呈現HTML。
This tutorial包含幾乎所有你需要的。除了得到html部分,你可以在this找到答案。
之後,您可以將html提供給您想要的任何解析器。
編輯
只是想到了另外一個辦法,你可以試試WebKit Html2Pdf。它的目的是創建PDF文件,但它在底層使用WebKit,並且可以注入自定義腳本(如document.onload回調),在加載頁面後將SVG內容發佈到您的服務中。
但我不會走這條路,它有很多限制(基本上只適用於直接網址),整體都相當混亂。
你的確沒有理解這個問題,htmlunit本身沒有javascript引擎。但是,我想要一個「純粹的」java方式,不知道Rhino或Nashborn是否可以處理這個問題。 –
在這種情況下,你應該提出你的實際案例,因爲有很多選擇,並且據我所知,沒有一個是理想的,所以沒有人可以肯定地告訴你他們會爲你工作。 – chimmi
- 1. 在網頁中呈現SVG
- 2. 獲取動態呈現網頁的DOM
- 3. 動態呈現的SVG不顯示
- 4. Chrome中的SVG動態呈現
- 5. PHP - 通過網頁瀏覽器呈現動態網頁
- 6. 在網頁上呈現的Javascript代碼
- 7. 在網頁上呈現推文
- 8. 在網頁上呈現Microsoft Word文檔
- 9. 在同一頁上呈現Bootstrap模態
- 10. 呈現通過JDBC檢索表 - JAVA
- 11. 從ajax驅動的網站檢索呈現的html
- 12. 在IE7中呈現網頁
- 13. 動態呈現指定版本的IE中的網頁
- 14. 使用d3.js呈現MathML在svg上
- 15. 在動態ID(React JS)上呈現reactdom
- 16. 在EmberJS上動態地呈現視圖
- 17. SVG未在IE中呈現
- 18. 動態頁面標題 - 後json呈現
- 19. 檢索「動態網站」的源頭在java中
- 20. 動態添加到iframe的SVG無法正確呈現
- 21. 動態呈現webmatrix上純淨的.html頁面
- 22. 如何在當前網頁上呈現來自外部網站的網頁?
- 23. 在同一頁面內檢索呈現的輸出
- 24. 在移動網頁上搜索頁面
- 25. 從java中的網頁檢索URL
- 26. Java - 檢索具有授權的網頁
- 27. 獲得SVG元素 'id' 屬性動態(谷歌SVG網頁)
- 28. 網頁無法呈現
- 29. 呈現網頁縮略圖
- 30. 瀏覽器呈現網頁
我想補充,我已經試過HtmlUnit,jsoup,甚至在SWT進行調查,但無濟於事。這就是爲什麼這個問題有點寬泛,因爲我不想將解決方案限制在一個工具上。 –
http://stackoverflow.com/questions/26027313/how-to-load-and-parse-svg-documents可能的重複? –
@definecindyconst這不是[http://stackoverflow.com/questions/26027313/how-to-load-and-parse-svg-documents]的重複,解析SVG很簡單。 –