js提取指定网站内容( 风中蹦迪02-24:45阅读4网站SEO优化关注javascript脚本怎么运行(js编写教程))
优采云 发布时间: 2022-02-24 19:13js提取指定网站内容(
风中蹦迪02-24:45阅读4网站SEO优化关注javascript脚本怎么运行(js编写教程))
在风中弹跳
02-24 11:45 阅读4网站SEO优化
关注
如何运行 javascript 脚本(js 脚本教程)
1 概述
本文介绍了在Java环境中执行JavaScript脚本的简单使用,包括以下内容
Java 8 内置 Nashorn Javascript 引擎介绍 Rhino JavaScript 引擎介绍和 XML 处理介绍 2 Java 8 中内置 Nashorn Javascript 引擎介绍
Nashorn 是一个内置于 Java 8 中的 JavaScript 引擎,没有任何依赖关系。
使用Nashorn的基本步骤如下
new out ScriptEngineManager 对象通过ScriptEngineManager 对象中的getEngineByName 方法获取指定的JavaScript 引擎,并返回ScriptEngine 对象。 Java 8 中默认的 JavaScript 引擎包括: [nashorn, Nashorn, , JS, JavaScript, script, ECMAScript, ecmascript] 通过 ScriptEngine 对象的 eval 方法执行 JavaScript 脚本。 2.1 通过PrintWriter对象从脚本中获取打印输出
Javascript 脚本中没有函数,也没有返回值。内容通过打印输出。这时需要通过PrintWriter获取读取脚本中的打印输出,如下
@Test
public void test_nashorn() {
try {
ScriptEngine engine = new ScriptEngineManager().getEngineByName("Nashorn");
ScriptContext scriptContext = engine.getContext();
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
scriptContext.setWriter(printWriter);
String jsString = "var obj=JSON.parse('{\\\"data\\\":\\\"7155\\\",\\\"sign\\\":\\\"success\\\",\\\"message\\\":null}');print(obj.sign==\"success\");";
stringWriter = new StringWriter();
printWriter = new PrintWriter(stringWriter);
scriptContext.setWriter(printWriter);
engine.eval(jsString);
System.out.println(String.format("1 result = %s",stringWriter.toString()));
jsString = "var obj=JSON.parse('{\\\"data\\\":\\\"7157\\\",\\\"sign\\\":\\\"success\\\",\\\"message\\\":null}');print((function getData() { return obj.data;})())";
stringWriter = new StringWriter();
printWriter = new PrintWriter(stringWriter);
scriptContext.setWriter(printWriter);
engine.eval(jsString);
System.out.println(String.format("2 result = %s",stringWriter.toString()));
jsString = "var obj=JSON.parse('{\\\"data\\\":\\\"7157\\\",\\\"sign\\\":\\\"success\\\",\\\"message\\\":null}');print((function getData() { return obj.data;})())";
stringWriter = new StringWriter();
printWriter = new PrintWriter(stringWriter);
scriptContext.setWriter(printWriter);
engine.eval(jsString);
System.out.println(String.format("3 result = %s",stringWriter.toString()));
} catch (Exception e) {
e.printStackTrace();
}
}
2.2 获取匿名函数的返回值
Javascript脚本是匿名函数,有返回值,可以通过eval函数直接访问
@Test
public void test_js_function_return() {
try {
ScriptEngine engine = new ScriptEngineManager().getEngineByName("Nashorn");
String jsFunction = "(function(){var obj=JSON.parse('{\\\"data\\\":\\\"7155\\\",\\\"sign\\\":\\\"success\\\",\\\"message\\\":null}');return obj.sign==\"success\"})();";
Boolean result = (Boolean) engine.eval(jsFunction);
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
}
2.3调用Javascript脚本中指定的函数
Javascript脚本中有变量和多个函数,如下
@Test
public void test_invoke_js_function() {
try {
ScriptEngine engine = new ScriptEngineManager().getEngineByName("Nashorn");
/*
var obj = JSON.parse('{\"data\":\"7155\",\"sign\":\"success\",\"message\":null}');
function checkSign() {
return obj.sign == 'success'
}
function getData() {
return obj.data
}
function calculate(a, b) {
return a + b
}
*/
String jsFunction = "var obj=JSON.parse('{\\\"data\\\":\\\"7155\\\",\\\"sign\\\":\\\"success\\\",\\\"message\\\":null}');function checkSign(){return obj.sign=='success'}function getData(){return obj.data}function calculate(a,b){return a+b}";
engine.eval(jsFunction);
Invocable invocable = (Invocable) engine;
Object result = invocable.invokeFunction("checkSign", null);
System.out.println(result);
result = invocable.invokeFunction("getData", null);
System.out.println(result);
result = invocable.invokeFunction("calculate", 2, 5);
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
}
true
7155
7.0
2.4 读取Javascript文件并执行
本例读取并执行Javascript文件,如下
@Test
public void test_invoke_js_file() {
try {
ScriptEngine engine = new ScriptEngineManager().getEngineByName("Nashorn");
engine.eval(new FileReader(TestJSEngine.class.getResource("/test.js").getPath()));
Invocable invocable = (Invocable) engine;
Object result = invocable.invokeFunction("checkSign", null);
System.out.println(result);
result = invocable.invokeFunction("getData", null);
System.out.println(result);
result = invocable.invokeFunction("calculate", 2, 5);
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
}
文件内容同上。
3 Rhino JavaScript 引擎简介
默认的 Nashorn 引擎无法解析 xml,像 DOMParser 这样的对象是浏览器的内置组件。
这里可以依靠Rhino引擎通过Maven来处理xml。
cat.inspiracio
rhino-js-engine
1.7.10
使用的步骤与其他 JavaScript 引擎相同,引擎名称为 Rhino。
3.1 Rhino 解析xml
在这里,通过读取文件来加载和解析 JavaScript 脚本。脚本就是解析一段xml的过程。
print("----------------------------------------");
var e = new XML(' Joe20 Sue30 ');
// 获取所有的员工
print("获取所有的员工:\n" + e..name);
// 名字叫 Joe 的员工
print("名字叫 Joe 的员工:\n" + e.employee.(name == "Joe"));
// 员工的id 为 1 和 2
print("员工的id 为 1 和 2:\n" + e.employee.(@id == 1 || @id == 2));
// 员工的id 为 1
print("员工的id 为 1: " + e.employee.(@id == 1).name);
print("----------------------------------------");
@Test
public void test_rhino_file_js() {
try {
ScriptEngine engine = new ScriptEngineManager().getEngineByName("rhino");
ScriptContext scriptContext = engine.getContext();
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
scriptContext.setWriter(printWriter);
engine.eval(new FileReader(TestJSEngine.class.getResource("/xml.js").getPath()));
System.out.println(String.format("xml result = %s",stringWriter.toString() ));
} catch (Exception e) {
e.printStackTrace();
}
}
xml result = ----------------------------------------
All the employee names are:
Joe
Sue
The employee named Joe is:
Joe
20
Employees with ids 1 & 2:
Joe
20
Sue
30
Name of the the employee with ID=1: Joe
----------------------------------------
3.2 测试
操作成功!
1
7
@Test
public void test_rhino() {
try {
ScriptEngine engine = new ScriptEngineManager().getEngineByName("rhino");
String jsString = jsString = "var obj=new XML(' 0 操作成功! 1 7 ');print(obj.Message == '操作成功!');";
ScriptContext scriptContext = engine.getContext();
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
scriptContext.setWriter(printWriter);
engine.eval(jsString);
System.out.println(String.format("xml result = %s",stringWriter.toString() ));
} catch (Exception e) {
e.printStackTrace();
}
}
以上输出如下
xml result = true
文章类别
百科测验
文章标签
脚本
js
教程