检索纯Java中呈现的HTML DOM
Retrieve rendered HTML DOM in pure Java
我知道这里已经有一些类似的问题了。但我不想用Java构建浏览器,我只想看到源代码完全生成(或"渲染")。就好像我在浏览器中查看生成的DOM一样。有人知道这样的工具吗?
我看过Cobra和HtmlUnit,但它们似乎无法正确呈现更复杂的网站。特别是当AJAX调用在加载后向网站添加内容时。我真的需要一个和浏览器一样的工具,没有实际的显示。我最终必须远程控制浏览器吗?
有人有这方面的经验吗?
在这里可以找到一个非常相似的问题,但没有任何令人满意的答案。
我认为不存在在加载页面后进行异步调用抓取的库。
我的建议是:
- 使用Cobra或类似的库获取页面的HTML
- 分析AJAX请求的源。(例如,ajax调用将有一个URL参数和一个可用于请求的"data"JSON字符串)
- 对于每个AJAX调用,对您捕获的URL参数发出另一个请求
- 将每个AJAX调用的结果附加到原始页面的HTML源代码中
这不是一个完美的解决方案,在需要用户触发事件的情况下也不会对您有所帮助。此外,根据网站用于进行异步调用的javascript库的不同,您捕获AJAX事件URL的代码也会有所不同。
希望能有所帮助。
Selenium做了一些类似的事情。您需要在机器上安装硒遥控器。然后您可以将url请求传递给selenium。Selenium将打开浏览器,呈现url中指定的html/dhtml页面。之后,您可以通过查询selenium来获得整个dom。你可以通过编码来完成所有这些事情
http://seleniumhq.org/请注意:您需要安装slenium网络驱动程序或硒遥控器,而不是硒ide。
我必须自己回答这个问题。。。最后,我找到的最好的解决方案实际上是HtmlUnit。对我来说太慢了。所以我构建了自己的工具,当然需要手动设置才能调用所需的链接。但因此,它不必等待任何js超时或类似情况,而是从页面中解析请求的信息并进行所需的调用。这需要大量的手工工作,但似乎没有其他解决方案能足够快地工作。
- 如何使用JavaScript在没有html dom的情况下隐藏html元素
- 如何序列化包括影子 DOM 在内的 HTML DOM
- 通过Java加载XML并制作HTML DOM的一部分
- 以非像素为单位获取HTML DOM元素的CSS高度,在我的例子中是英寸
- HTML DOM Text() nodes
- 递归单步执行 HTML DOM 并打印属性
- 从自身获取对脚本作为 HTML DOM 元素的引用
- 我可以将 HTML 字符串分配给 HTML DOM 节点的内部 HTML 属性吗?
- Javascript HTML DOM select
- 如何反转 JavaScript 变量中 HTML DOM 元素的顺序
- 在 HTML DOM 元素下添加 javascript 文件或 css 文件
- HTML DOM - element.appendChild() 的行为不像我期望的那样
- HTML DOM 使用 AngularJS ng-if 函数
- PHP 简单 HTML DOM 和下拉元素已选选项
- 将 HTML DOM 保存到服务器上的文件
- 为什么我的 HTML 按钮刷新页面?/为什么我不能让我的新 HTML DOM 元素插入到我的页面中
- 节点上的 d3 事件处理程序不在 HTML DOM 中
- 如何转换 HTML DOM 结构
- HTML/DOM:鼠标事件更改按钮
- HTML DOM alerting style.width