Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在纯Java中检索呈现的HTML DOM_Java_Javascript_Ajax_Browser_Rendering - Fatal编程技术网

在纯Java中检索呈现的HTML DOM

在纯Java中检索呈现的HTML DOM,java,javascript,ajax,browser,rendering,Java,Javascript,Ajax,Browser,Rendering,我知道这里已经有一些类似的问题了。但我不想用Java构建浏览器,我只想看到完整生成(或“呈现”)的源代码。就像我在浏览器中查看生成的DOM一样。有人知道这方面的工具吗 我看了一下和,但它们似乎无法正确地呈现更复杂的网站。尤其是当有AJAX调用在站点加载后向其添加内容时。我真的需要一个工具,它做的浏览器一样,没有实际的显示它。我最终必须遥控浏览器吗 有人有这方面的经验吗 可以找到一个非常类似的问题,但没有任何令人满意的答案。我不相信存在一个在页面加载后对异步调用进行抓取的库 我的建议是: 使用Co

我知道这里已经有一些类似的问题了。但我不想用Java构建浏览器,我只想看到完整生成(或“呈现”)的源代码。就像我在浏览器中查看生成的DOM一样。有人知道这方面的工具吗

我看了一下和,但它们似乎无法正确地呈现更复杂的网站。尤其是当有AJAX调用在站点加载后向其添加内容时。我真的需要一个工具,它做的浏览器一样,没有实际的显示它。我最终必须遥控浏览器吗

有人有这方面的经验吗


可以找到一个非常类似的问题,但没有任何令人满意的答案。

我不相信存在一个在页面加载后对异步调用进行抓取的库

我的建议是:

  • 使用Cobra或类似的库获取页面的HTML
  • 解析AJAX请求的源代码。(例如,ajax调用将有一个URL参数和一个可用于请求的“数据”JSON字符串)
  • 对于每个AJAX调用,对捕获的URL参数发出另一个请求
  • 将每个AJAX调用的结果附加到原始页面的HTML源中 这不是一个完美的解决方案,在需要用户触发事件的场景中,它不会帮助您。此外,根据网站用于进行异步调用的javascript库的不同,用于捕获AJAX事件URL的代码也会有所不同


    希望能有所帮助。

    硒做一些类似的事情。您需要在计算机上安装selenium遥控器。然后您可以将url请求传递给selenium。Selenium将打开浏览器,呈现url中指定的html/dhtml页面。之后,您可以通过查询selenium来获得整个dom。您可以通过编码完成所有这些工作


    请注意:您需要安装slenium webdriver或selenium遥控器,而不是selenium ide。

    我必须自己回答这个问题。。。最后,我找到的最好的解决方案实际上就是HtmlUnit。这对我来说太慢了。所以我建立了自己的工具,当然需要手动设置来调用所需的链接。但是,它不必等待任何js超时或类似情况,而是解析页面中请求的信息并执行所需的调用。这需要大量的手工工作,但似乎没有其他解决方案能够足够快地工作。

    您需要查看呈现的HTML或源代码吗?我不需要查看可视化呈现页面,我需要查看生成的源代码。就像firebug在DOM中展示的一样。你看过Selenium吗?我不知道如何使用它来满足您的要求,但可能有一个浏览器驱动程序的后门api。如果您只需要提供URL的呈现HTML,您可以尝试我很想知道一个解决方案,而无需使用浏览器,特别是javascriptI生成的元素,我已经在很多情况下这样做了,但在更复杂的情况下,这是相当不方便的。无论如何谢谢你!非常感谢您的提示,这可能是最终的解决方案。但我不想真正启动浏览器。它可能太慢了。。。我需要评估一下。启动浏览器真的很奇怪。也许你可以用一些浏览器引擎来代替浏览器。但在这种情况下,我认为你不能使用硒,这可能会增加头部。我认为通过读取url来生成整个dom并不容易。会有一些东西,比如在body-onload或aftet-ajax请求中完成的动态操作。是的。我还刚刚从另一篇文章中意识到,selenium支持“无头”处理,但随后再次使用了HtmlUnit。HtmlUnit做得很好,但似乎很慢,有时不如普通浏览器工作。selenium RC(远程控制)通常非常慢。如果您的目标是webcrawling,那么这不是正确的方法。如果获取渲染的Dom是您项目的核心,那么您可以使用一些javascript渲染引擎。是的,我需要速度。你知道有哪些javascript呈现引擎能很好地集成到java中吗?