在打开 URL 并获取链接中执行 javascript

Executing javascript in Opening a URL and getting links

本文关键字:链接 执行 javascript 获取 URL      更新时间:2023-09-26
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();
        }
    }
}

现在,您的文件.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获取它的链接?

你可以在 Rhino 中嵌入 Env.js 来获得这种功能

根据文档:

window 对象表示浏览器中打开的窗口。

由于您不是在浏览器中执行脚本,因此未定义窗口对象。

您可以使用 URL/URLConnecion 类读取 URL,并将其提供给 ScriptEngine。这里有一个教程。

在javascript中,window表示浏览器窗口。因此,当您尝试从 Java 执行此 js 时,它找不到浏览器窗口并且您收到错误。您可以在 Java 中使用 URL 类来获取 URL 的内容。

试试这个:

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;
}
你可以

使用HtmlUnit是java API,我认为它可以帮助你访问执行的js内容,作为一个简单的html。

WebClient webClient = new WebClient();
HtmlPage myPage = (HtmlPage) webClient.getPage(new URL("YourURL"));
System.out.println(myPage.getVisibleText());