在打开 URL 并获取链接中执行 javascript
Executing javascript in Opening a URL and getting links
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());
相关文章:
- 外部链接的Javascript文件赢得't执行,但函数有效
- 如何区分用户单击链接和在 UIWebView 中执行自动重定向的页面
- 如何单击将执行但不重定向的链接
- 超链接单击以加载新页面并执行JavaScript
- 选项卡中的a href链接没有执行任何操作
- 执行javascript和JSON登录的动态链接
- 首先执行的是链接或onclick中的JavaScript
- 单击链接时执行异步AJAX调用,然后跟随该链接
- 使用javascript执行链接
- 悬停在链接上不会执行javascript
- 以即时点击样式执行 PJAX 调用(仅在链接悬停时加载所需的内容)
- 如何执行一个包含更多 HREF 地址的链接属性
- 从链接执行 Javascript 文件
- 阻止对运行AJAX的超链接执行默认操作
- 单击链接执行函数
- 你能从上一页的链接执行某些加载功能吗
- 单击链接执行PHP代码
- 是否可以让HTML中的一个链接执行两个脚本
- Angular会在指令链接执行之前获取承诺数据
- 如何使链接执行按钮onclick代码