Нумерация страниц на ASPX может быть болезненной. Лучшее, что вы можете сделать, - это использовать ваш браузер для просмотра параметров данных, которые он отправляет на сервер, а затем попытаться эмулировать это в коде.
Я написал подробное руководство по его обработке здесь , но вместо JSoup используется HTML-анализатор однозначности (коммерческий закрытый исходный код).
Короче говоря, вы должны попытаться получить элемент <form>
с id="aspnetForm"
и прочитать элементы формы, чтобы сгенерировать запрос POST для следующей страницы. Данные формы обычно выходят с такими вещами, как это:
__EVENTTARGET =
__EVENTARGUMENT =
__VIEWSTATE = /wEPDwUKMTU0OTkzNjExNg8WBB4JU29ydE9yZ ... a very long string
__VIEWSTATEGENERATOR = 32423F7A
... and other gibberish
Затем вам нужно взглянуть на каждый из них и сравнить с тем, что отправляет ваш браузер. Иногда вам нужно получить значения из других элементов страницы, чтобы сгенерировать аналогичный запрос POST. Возможно, вам придется УДАЛИТЬ некоторые параметры, которые вы получаете - снова, чтобы ваш код вел себя точно так же, как ваш браузер
После некоторых (разочаровывающих) проб и ошибок вы получите его работоспособным. Сервер должен вернуть результат с разделителем канала, который можно разбить и проанализировать. Что-то вроде:
25081|updatePanel|ctl00_ContentPlaceHolder1_pnlgrdSearchResult|
<div>
<div style="font-weight: bold;">
... more stuff
|__EVENTARGUMENT||343908|hiddenField|__VIEWSTATE|/wEPDwU... another very long string ...1Pni|8|hiddenField|__VIEWSTATEGENERATOR|32423F7A| other gibberish
Из ответа ТА этого типа вам нужно сгенерировать новые POST-запросы для последующих страниц, например:
String viewState = substringBetween(ajaxResponse, "__VIEWSTATE|", "|");
Тогда:
request.setDataParameter("__VIEWSTATE", viewState);
В каждом ответе будет больше параметров данных. Но многое зависит от сайта, на который вы ориентируетесь.
Надеюсь, это немного поможет.