有没有一种方法可以让我从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很简单。 –