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

时间:2018-03-07 19:59:24

标签: javascript browser

我有一个用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())

是否有现成的解决方案,或者我可以从哪里开始?

1 个答案:

答案 0 :(得分:1)

总体

您的需求符合无头浏览器的描述。其中一个描述可以找到here

  

没有图形用户界面的Web浏览器,以编程方式控制。用于自动化,测试和其他目的。 - Source

还有一个包含大量此类浏览器的列表。在您的情况下,jBrowserDriver可能是正确的选择。但名单很大,也有其他选择。

jBrowserDriver

以下显示了here提供的示例。您应该将脚本打包在一个简单的.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();
  }
}