Выполнение JavaScript в Java - Открытие URL и получение ссылок - PullRequest
3 голосов
/ 22 мая 2011
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?

Ответы [ 4 ]

6 голосов
/ 22 мая 2011

вы можете встроить Env.js в Rhino, чтобы получить такую ​​функциональность

2 голосов
/ 22 мая 2011

Согласно документации :

Объект window представляет открытое окно в браузере.

Поскольку вы не выполняете свой скриптв браузере объект окна не определен.

Вы можете прочитать URL-адрес с помощью классов URL / URLConnecion и передать его в ScriptEngine. Здесь есть учебник .

0 голосов
/ 23 мая 2011

попробуйте это:

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;
}
0 голосов
/ 22 мая 2011

В javascript window означает окно браузера. Поэтому, когда вы пытаетесь выполнить этот js из Java, он не может найти окно браузера, и вы получаете ошибку. Вы можете использовать URL-класс в Java для получения содержимого URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...