import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import java.io.FileReader;
public class Main {
public static void main(String[] args) {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
try {
FileReader reader = new FileReader("C:/yourfile.js");
engine.put("urlfromjava", "http://www.something.com/?asvb");
engine.eval(reader);
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
现在,yourfile.js包含这一行
function urlget(url)
{
print("URL:"+url);
var loc = window.open(url);
var link = document.getElementsByTagName('a')["61"].href;
return ("\nLink is: \n"+link);
}
var x = urlget(urlfromjava);
print(x);
我收到错误
"javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "window" is not defined"
如何打开URL并从java获取它的链接?
答案 0 :(得分:6)
你可以在Rhino中嵌入Env.js来获得这种功能
答案 1 :(得分:2)
窗口对象表示浏览器中的打开窗口。
由于您未在浏览器中执行脚本,因此未定义窗口对象。
您可以使用URL / URLConnecion类读取URL并将其提供给ScriptEngine。 There is a tutorial here
答案 2 :(得分:0)
在javascript中window
表示浏览器窗口。因此,当您尝试从Java执行此js时,它无法找到浏览器窗口并且您收到错误。您可以使用Java中的URL类来获取URL的内容。
答案 3 :(得分:0)
试试这个:
import java.net.*;
import java.io.*;
public class URLConnectionReader {
public static void main(String[] args) throws Exception {
URL yahoo = new URL("http://www.yahoo.com/");
URLConnection yc = yahoo.openConnection();
BufferedReader in = new BufferedReader(
new InputStreamReader(
yc.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);// or save to some StringBuilder like this: sb.append(inputLine); then pass the sb.toString() to the method that gets links out of it - > see getLinks below
in.close();
}
}
private static final String CLOSING_QUOTE = "\"";
private static final String HREF_PREFIX = "href=\"";
private static final String HTTP_PREFIX = "http://";
public static Set<String> getLinks(String page) {
Set<String> links = new HashSet<String>();
String[] rawLinks = StringUtils.splitByWholeSeparator(page, HREF_PREFIX);
for (String str : rawLinks) {
if(str.startsWith(HTTP_PREFIX)) {
links.add(StringUtils.substringBefore(str, CLOSING_QUOTE));
}
}
return links;
}
答案 4 :(得分:0)
您可以使用 HtmlUnit 是Java API,我认为它可以帮助您以简单的html格式访问已执行的js内容。
=FILTER()