Я пытаюсь использовать python mechanize для очистки разбитой на страницы таблицы, но таблица не обновляется новыми данными, когда я говорю mechanize нажать следующую страницу.
HTML-код страницы, которую я пытаюсь почистить, выглядит следующим образом, где последний ряд содержит кнопки страницы:
<table>
<tbody>
< ---- several tr's comprising the first page of data --->
<tr><td>
<span id="siteMasterHolder_basicBodyHolder_CalendarSearchResultList_gvResults_lnkPage1">1</span>
<a href="javascript:__doPostBack('ctl00$ctl00$siteMasterHolder$basicBodyHolder$CalendarSearchResultList$gvResults$ctl23$lnkPage2','')" id="siteMasterHolder_basicBodyHolder_CalendarSearchResultList_gvResults_lnkPage2">2</a>
<a href="javascript:__doPostBack('ctl00$ctl00$siteMasterHolder$basicBodyHolder$CalendarSearchResultList$gvResults$ctl23$lnkPage3','')" id="siteMasterHolder_basicBodyHolder_CalendarSearchResultList_gvResults_lnkPage3">3</a>
....etc up to page 10
</td></tr>
</tbody>
</table>
Функция __doPostBack
на странице такова:
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
Мой python scraper получает список тегов <a>
в виде объектов BeautifulSoup и делает следующее:
for i, tag in enumerate(aNums):
tagId = tag['id']
br.select_form(nr=1)
br.form.set_all_readonly(False)
br.form['__EVENTTARGET'] = tagId
pageNum = 'ctl00$ctl00$siteMasterHolder$basicBodyHolder$CalendarSearchResultList$hfPageNumber'
br.form.set_value(tag.text, pageNum)
ctl = br.find_control("ctl00$ctl00$siteMasterHolder$basicBodyHolder$CalendarSearchResultList$btnPrintPage")
br.form.controls.remove(ctl)
ctl = br.find_control("ctl00$ctl00$siteMasterHolder$basicBodyHolder$CalendarSearchResultList$btnPrintAll")
br.form.controls.remove(ctl)
response = br.submit()
content = response.read()
soup = BeautifulSoup(content,features="html5lib")
< --- then some code to scrape the table on the new page --->
Но когда я запускаю скрипт, он просто очищает страницу 1 для каждой итерации.
Это заголовки, которые публикуются при нажатии <a>
тега '2' (статус только для чтения в скобках):
__EVENTTARGET: (False)
__EVENTARGUMENT: (False)
__VIEWSTATE:/wEPDwULLT... (False) [truncated for reading ease]
__VIEWSTATEGENERATOR:1D32DE84 (False)
__EVENTVALIDATION:/wEdAA6Sgc... (False) [truncated for reading ease]
ctl00$ctl00$siteMasterHolder$basicBodyHolder$CalendarSearchResultList$hfPageNumber:2 (False)
ctl00$ctl00$siteMasterHolder$basicBodyHolder$CalendarSearchResultList$btnPrintPage:Print This Page (False)
ctl00$ctl00$siteMasterHolder$basicBodyHolder$CalendarSearchResultList$btnPrintAll:Print All Pages (False)
Я подозреваю, что проблема связана с заголовком, заканчивающимся 'PageNumber'
значением '1', потому что когда я печатал, какое значение было после отправки формы, оно все равно было '1', а не '2' или ' 3 ', как и должно быть, несмотря на то, что '__EVENTTARGET'
принимает значение новой строки, которую я установил. Но я просто не могу понять это.
Если возможно, я бы предпочел использовать механизацию, а не библиотеку, подобную селену, которая может использовать JavaScript.
Все здесь очень полезны и находчивы, так что спасибо заранее!