我正在使用JSoup来解析所有链接的网页,然后测试这些收集链接的响应代码。
我遇到的问题是我正在测试的一些页面有使用以下命令打开javascript弹出窗口的链接:。我确信有一种简单的方法可以避免选择此链接,但我不能再想了!
我的代码:
PingUrls(String pageUrl) {
url = pageUrl;
int i = 0;
int retries = 3;
while (i < retries){
try {
response = Jsoup.connect(url)
.userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21")
.timeout(10000)
.execute();
success = true;
break;
} catch (IOException e) {
}
System.out.println("Attempt "+i);
i++;
}
}
public int getUrlStatus(){
if(success){
int statusCode = response.statusCode();
return statusCode;
}else {
return 404;
}
}
public ArrayList<String> getLinks(String targetValue){
ArrayList<String> urls = new ArrayList<String>();
try {
Document doc = response.parse();
Elements element = doc.select(targetValue+" a[href]");
for (Element page : element){
urls.add(page.attr("abs:href"));
}
return urls;
} catch (IOException e) {
System.out.println(e);
return null;
}
}
答案 0 :(得分:1)
首先,我要使用Set而不是List。 (如果您不熟悉集合,则集合将确保没有重复的元素)
另外,我提出了一个像manageURL(String url)这样的方法;在将其添加到Collection之前。在其中进行一些测试,以确保它按照您想要的方式进行。就像测试url的绝对路径,规范路径一样,并确保它是http或https protocoled。