You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
3.3 KiB
92 lines
3.3 KiB
import org.jsoup.nodes.Element;
|
|
import org.jsoup.select.Elements;
|
|
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Optional;
|
|
import java.util.stream.Collectors;
|
|
public class UpdatePageValues {
|
|
|
|
private List<Element> aspNetHidden;
|
|
private long pageIndex;
|
|
private long maxPageIndex;
|
|
private UpdatePageTableValues pageTableValues;
|
|
public UpdatePageValues(Elements elements) {
|
|
pageTableValues = new UpdatePageTableValues(elements);
|
|
|
|
//
|
|
// gets hidden input values (used for accessing the next page)
|
|
//
|
|
this.aspNetHidden = elements
|
|
.parallelStream()
|
|
.filter(element -> element.tagName().equals("input") && element.attr("type")
|
|
.equals("hidden"))
|
|
.collect(Collectors.toList());
|
|
|
|
//
|
|
// get the span that contains the page index information. In theory this
|
|
// span should always be inside the DOM but just in case we are going to use Optional.
|
|
//
|
|
Optional<Element> pageIndexElement = elements
|
|
.parallelStream()
|
|
.filter(element -> element.tagName().equals("span") && element.attr("id").equals("ctl00_catalogBody_searchDuration"))
|
|
.findFirst();
|
|
|
|
//
|
|
// if the span element containing the page index information is present then
|
|
// can start filling in our classes private members.
|
|
//
|
|
try {
|
|
pageIndexElement.ifPresentOrElse(element -> {
|
|
var values = element.text().split(" ");
|
|
this.pageIndex = Integer.parseInt(values[6]);
|
|
this.maxPageIndex = Integer.parseInt(values[8].replace(")", ""));
|
|
},
|
|
() -> {
|
|
this.pageIndex = 0;
|
|
this.maxPageIndex = 0;
|
|
});
|
|
} catch (Exception e) {
|
|
System.out.println("[!] failed to parse index, this can be because there is no span containing index information on this page!");
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
public boolean hasNextPage() {
|
|
// only valid if page index and max page index are:
|
|
// 1.) both not 0
|
|
// 2.) are not the same value (meaning there is not next page)
|
|
return !((pageIndex != 0 && maxPageIndex != 0) && pageIndex == maxPageIndex);
|
|
}
|
|
|
|
public long getPageIndex() {
|
|
return pageIndex;
|
|
}
|
|
|
|
public long getMaxPageIndex() {
|
|
return maxPageIndex;
|
|
}
|
|
|
|
public Map<String, String> getAspNetHiddenUrlEncoded() {
|
|
var aspNetHeaderMap = new HashMap<String, String>();
|
|
aspNetHidden.parallelStream().forEach(element -> {
|
|
// replace event with new page event
|
|
if(element.attr("name").equals("__EVENTTARGET")) {
|
|
aspNetHeaderMap.put(
|
|
element.attr("id"),
|
|
"ctl00$catalogBody$nextPageLinkText");
|
|
} else {
|
|
aspNetHeaderMap.put(
|
|
element.attr("id"),
|
|
element.attr("value"));
|
|
}
|
|
});
|
|
return aspNetHeaderMap;
|
|
}
|
|
|
|
public UpdatePageTableValues getPageTableValues() {
|
|
return pageTableValues;
|
|
}
|
|
}
|