最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Executing javascript in java - Opening a URL and getting links - Stack Overflow

programmeradmin3浏览0评论
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", "/?asvb");
            engine.eval(reader);
            reader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Right now, the yourfile.js contains this line

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);

I get the error

"javax.script.ScriptException: sun.mozilla.javascript.internal.EcmaError: ReferenceError: "window" is not defined"

How to open a URL and get the links of it from java?

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./?asvb");
            engine.eval(reader);
            reader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Right now, the yourfile.js contains this line

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);

I get the error

"javax.script.ScriptException: sun.mozilla.javascript.internal.EcmaError: ReferenceError: "window" is not defined"

How to open a URL and get the links of it from java?

Share Improve this question asked May 22, 2011 at 9:11 harihbharihb 6522 gold badges8 silver badges17 bronze badges
Add a ment  | 

5 Answers 5

Reset to default 6

you can embed Env.js in Rhino to get this kind of functionality

According to the documentation:

The window object represents an open window in a browser.

Since you are not executing your script in a browser, the window object is not defined.

You can read the URL using the URL/URLConnecion classes and feed it to the ScriptEngine. There is a tutorial here.

In javascript window means browser window. So when you are trying to execute this js from Java, it is unable to find browser window and you are getting error. You can use URL class in Java to get the content of the url.

try this:

import java.*;  
import java.io.*;  
  public class URLConnectionReader {  
  public static void main(String[] args) throws Exception {  
        URL yahoo = new URL("http://www.yahoo./");  
        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;
}

you can use HtmlUnit is java API, i think it can help you to access the executed js content, as a simple html.

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

评论列表(0)

  1. 暂无评论