沙盒JavaScript运行时引擎(Chrome/Firefox/Opera/where)

沙盒JavaScript运行时引擎(Chrome/Firefox/Opera/where),javascript,browser,Javascript,Browser,我有一个用JS写的脚本。我想在沙盒模式下运行它,就好像它是一个浏览器,允许DOM操作和网络,但没有任何持久性(缓存、cookie、本地存储等),并且有固定的执行时间(比如说60秒) 我想用一系列样本捕获DOM状态,然后分析内容 API可以是任何不能从Java访问的东西 下面是一个我想要实现的示例: val myScript = "document.body.appendChild(document.createTextNode('foo'))" Chrome.SandboxedWindow().

我有一个用JS写的脚本。我想在沙盒模式下运行它,就好像它是一个浏览器,允许DOM操作和网络,但没有任何持久性(缓存、cookie、本地存储等),并且有固定的执行时间(比如说60秒)

我想用一系列样本捕获DOM状态,然后分析内容

API可以是任何不能从Java访问的东西

下面是一个我想要实现的示例:

val myScript = "document.body.appendChild(document.createTextNode('foo'))"
Chrome.SandboxedWindow().execute(myScript, duration = 60, onDomDhanged = {
    snapshots.add(takeSnapsot()) // whatever
})
...
println(snapshots[0].domContents.toString())
是否有现成的解决方案,或者从哪里开始?

总体而言 您的需求符合无头浏览器的描述。可以找到其中一种描述

没有图形用户界面的web浏览器,通过编程控制。用于自动化、测试和其他目的。-

还有一个列表中有很多这样的浏览器。在你的情况下,可能是正确的选择。但名单是巨大的,而且还有其他选择

jBrowserDriver 下面显示了提供的示例。您应该将脚本打包到一个简单的.html文件中,该文件可以使用
driver.get()加载之后。您也可以简单地为此设置一个本地服务器。您的行
println(snapshots[0].domContents.toString())
看起来已经类似于示例中的一行了
System.out.println(driver.getPageSource())


所谓的“无头浏览器”可能是您想要使用的工具集吗?你可以找到很多这样的工具。可能是的,谢谢。我添加了这个作为一个答案,包括这样一个工具的例子!它看起来与您发布的代码片段非常相似。
import org.openqa.selenium.WebDriver;
import com.machinepublishers.jbrowserdriver.Timezone;
import com.machinepublishers.jbrowserdriver.JBrowserDriver;
import com.machinepublishers.jbrowserdriver.Settings;

public class Example {
  public static void main(String[] args) {

    // You can optionally pass a Settings object here,
    // constructed using Settings.Builder
    JBrowserDriver driver = new JBrowserDriver(Settings.builder().
      timezone(Timezone.AMERICA_NEWYORK).build());

    // This will block for the page load and any
    // associated AJAX requests
    driver.get("http://example.com");

    // You can get status code unlike other Selenium drivers.
    // It blocks for AJAX requests and page loads after clicks 
    // and keyboard events.
    System.out.println(driver.getStatusCode());

    // Returns the page source in its current state, including
    // any DOM updates that occurred after page load
    System.out.println(driver.getPageSource());

    // Close the browser. Allows this thread to terminate.
    driver.quit();
  }
}