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.
winscrape/agent-smith/src/UpdatePageValues.java

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;
}
}