package com.yeshi.buwan.util.crawler;
|
|
import com.google.gson.Gson;
|
import org.jsoup.Connection;
|
import org.jsoup.Jsoup;
|
import org.jsoup.nodes.Document;
|
import org.jsoup.select.Elements;
|
|
import javax.script.Invocable;
|
import javax.script.ScriptEngine;
|
import javax.script.ScriptEngineManager;
|
import javax.script.ScriptException;
|
import java.io.IOException;
|
|
public class JsoupJavasciptUtil {
|
|
/**
|
* 获取脚本中的内容
|
*
|
* @param url
|
* @param userAgent
|
* @param key
|
* @return
|
* @throws IOException
|
*/
|
public static String getScriptContent(String url, String userAgent, String key) throws IOException {
|
String script = null;
|
Connection connection = Jsoup.connect(url).timeout(10000);
|
if (userAgent != null)
|
connection.userAgent(userAgent);
|
Document doc = connection.get();
|
Elements els = doc.getElementsByTag("script");
|
for (int i = 0; i < els.size(); i++) {
|
if (els.get(i).html().indexOf(key) > -1) {
|
script = els.get(i).html();
|
break;
|
}
|
}
|
return script;
|
}
|
|
private static ScriptEngineManager manager = new ScriptEngineManager();
|
private static ScriptEngine jsEngine = manager.getEngineByName("javascript");
|
|
|
/**
|
* 执行javascript脚本
|
*
|
* @param script
|
* @param methodName
|
* @param args
|
* @return
|
* @throws ScriptException
|
* @throws NoSuchMethodException
|
*/
|
public static Object executeJavascript(String script, String methodName, Object... args) throws ScriptException, NoSuchMethodException {
|
try {
|
jsEngine.eval(script);
|
} catch (ScriptException e) {
|
e.printStackTrace();
|
}
|
|
if (jsEngine instanceof Invocable) {
|
Invocable in = (Invocable) jsEngine;
|
Object result = in.invokeFunction(methodName, args);
|
return result;
|
}
|
return null;
|
}
|
|
}
|