<%@ page language="java" pageEncoding="GBK"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>超链接测试页面</title>
<script language="javascript">
function test1() {
var para = 1;
window.location.href = "aaa.do?para="+para;
}
function test2() {
var para = document.getElementById("para").value;
form1.action = "bbb.do?para="+para;
form1.submit();
}
</script>
</head>
<body>
<a onclick="test1()">1111111111111111111111111111</a>
<a onclick="test2()">2222222222222222222222222222</a>
<a href="ccc.do?para=3">3333333333333333333333333</a>
<form name="form1">
<input type="text" id="para" value="2">
</form>
</body>
</html>
如上所示:我要获取页面上所有超链接地址:
aaa.do?para=1
bbb.do?para=2
ccc.do?para=3我搜了两天百度和谷歌,找到的全是获取静态超链接ccc.do?para=3的方法,前面两种无法实现,求高人指点迷津...
<a href="http://news.sina.com.cn/">
<a href="http://mil.news.sina.com.cn">
<a href="http://news.sina.com.cn/society/">
<a href="http://finance.sina.com.cn/">
<a href="http://finance.sina.com.cn/stock/">
<a href="http://finance.sina.com.cn/fund/">
<a href="http://tech.sina.com.cn/">
<a href="http://mobile.sina.com.cn/">
<a href="http://digi.sina.com.cn/">
<a href="http://sports.sina.com.cn/">
<a href="http://sports.sina.com.cn/csl/">
<a href="http://sports.sina.com.cn/nba/">
<a href="http://ent.sina.com.cn/">
<a href="http://ent.sina.com.cn/star/">
<a href="http://yue.sina.com.cn/">
<a href="http://auto.sina.com.cn/">
<a href="http://photo.auto.sina.com.cn/">
<a href="http://auto.sina.com.cn/autocenter/">
<a href="http://blog.sina.com.cn/">
<a href="http://blog.sina.com.cn/lm/ruiblog/">
......但是我现在做的程序只能分析到这里,全是分析静态连接的,动态调用JS函数跳转的连接无法获取,这是让我比较困扰的地方,分析程序如下(其实也是照人抄的...):
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;public class HrefMatch {
public static void main(String[] args)
{
try
{
// get URL string from command line or use default
String urlString = "http://java.sun.com";
if (args.length > 0) {
urlString = args[0];
}
System.out.println("开始分析地址"+urlString); // open reader for URL
InputStreamReader in = new InputStreamReader(new URL(urlString).openStream());
// read contents into string buffer
StringBuilder input = new StringBuilder();
int ch;
while ((ch = in.read()) != -1) input.append((char) ch); // search for all occurrences of pattern
String patternString = "<a\\s+href\\s*=\\s*(\"[^\"]*\"|[^\\s>])\\s*>";
Pattern pattern = Pattern.compile(patternString, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(input); while (matcher.find())
{
int start = matcher.start();
int end = matcher.end();
String match = input.substring(start, end);
System.out.println(match);
}
}
catch (IOException e)
{
e.printStackTrace();
}
catch (PatternSyntaxException e)
{
e.printStackTrace();
}
}
}
var para = 1;
window.location.href = "aaa.do?para="+para;
}
<a onclick="test1()">1111111111111111111111111111</a>
这种东西也能获取到解析好的地址 aaa.do?para=1 吗?
我要的是aaa.do?para=1
不是"aaa.do?para="+para;
function test1() {
var para = 1;
window.location.href = "aaa.do?para="+para;
}
<a onclick="test1()">1111111111111111111111111111</a>类似于这种跳转方式,你能用简单的正则表达式解析出来
aaa.do?para=1
.....我觉得需要更加复杂的方式,比如直接点这个超链接,看跳到的URL具体是多少,然后记录下来...我需要的应该是一个模拟点击超链接的思路,而不是一个复杂的正则表达式分析...