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