package com.yeshi.buwan.util.crawler; 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; } }