【问题标题】:How to use the JavaScript API of PhantomJS in a Java Application如何在 Java 应用程序中使用 PhantomJS 的 JavaScript API
【发布时间】:2014-10-01 08:40:54
【问题描述】:

我想用 Java 编写一个应用程序,它应该在无头浏览器中测试一个网站,例如 PhantomJS 或zombie.js。 PhantomJS 脚本是用 JavaScript 编写的,那么如何在我的 Java 应用程序中使用 PhantomJS 提供的 JavaScript API 而不使用 Selenium 和 GhostDriver?这和 Nashorn 图书馆有关吗?

我需要完成的步骤的更多详细信息:
1. 创建一个 HTTP 请求(例如:java.net.HttpUrlConnection。)并将其发送到 Web 服务器
2.获取对应的Response并将Source保存在HTML文件中
3. 在 FAST 无头浏览器(无 HtmlUnit)中打开 HTML 文件
4. 验证打开 HTML Response 时是否出现 Alert with message xxx

有人知道解决办法吗?
PS:如果带有 GhostDriver 的 PhantomJs 支持警报处理会很容易,但事实并非如此!

【问题讨论】:

    标签: java javascript phantomjs alert headless-browser


    【解决方案1】:

    如果您想从 Java 应用程序在无头浏览器中进行测试,阻力最小的路径是使用 Selenium Java 驱动程序,HtmlUnit

    Nashorn 不会为您提供用于 PhantomJS 的 JavaScript API;它也不会提供像“window”和“document”这样的浏览器对象。它将允许您使用您提供的任何“主机”(本机 Java)对象在 Java 程序中运行 JavaScript,并在 JavaScript 中创建 Java 对象,因此您当然可以在 Java 中重新实现 PhantomJS API。但大概这不是你想要的。

    【讨论】:

    • 我现在正在使用HtmlUnit(没有Selenium),但我对速度不满意,由于Javascript渲染速度慢,它几乎和Firefox浏览器一样慢。
    【解决方案2】:

    您可以使用ScriptEngine 在 Java 中评估 PhantomJS 脚本;有关详细信息,请参阅here。示例:

    ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
    engine.eval(new FileReader("script.js"));
    

    【讨论】:

    • 你不能那样做。 PhantomJS 脚本不是自包含的,它们依赖于 PhantomJS API,如果您这样做,则不存在。您还有其他建议吗?
    • 您可以尝试使用 PhantomJS Inter Process Communicationphantomjs / javabindings
    • 某种 IPC 是最简单的解决方案,也是一个有效的答案。虽然,javabindings 似乎很有趣。你能用示例代码(如何使用),甚至如何构建一个答案吗?您可以将此添加到现有答案中,但也可以发布单独的答案。
    • 这将是很棒的 +1!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    相关资源
    最近更新 更多