js提取指定网站内容( 风中蹦迪02-24:45阅读4网站SEO优化关注javascript脚本怎么运行(js编写教程))

优采云 发布时间: 2022-02-24 19:13

  js提取指定网站内容(

风中蹦迪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

  教程

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线