最近在模擬HTTP請求抓取數據,但是服務器是asp.net開發的
分頁控件代碼
<tr> <td align="left">共 210 條記錄 -- 第 2 頁 -- 共 3 頁</td><td align="right"><a id="OraclePager1_First"
href="javascript:__doPostBack('OraclePager1$First','')"> 首頁 </a> <a id="OraclePager1_Prev" href="javascript:__doPostBack('OraclePager1$Prev','')"> 上一頁
</a> <a id="OraclePager1_Next" href="javascript:__doPostBack('OraclePager1$Next','')"> 下一頁 </a> <a id="OraclePager1_Last"
href="javascript:__doPostBack('OraclePager1$Last','')"> 尾頁 </a><select name="OraclePager1$PageList"
onchange="javascript:setTimeout('__doPostBack(\'OraclePager1$PageList\',\'\')', 0)" id="OraclePager1_PageList"> <option value="0">1</option> <option selected="selected" value="1">2</option> <option value="2">3</option> </select></td> </tr>
點擊下一頁其實是調用js方法
javascript:__doPostBack('OraclePager1$Next','')
通過抓包拼接請求postdata
ticket_postdata = "__EVENTTARGET=OraclePager1%24Next&__EVENTARGUMENT=" + getElementValueByID(ticket_html, "__EVENTARGUMENT") + "&__LASTFOCUS=&__VIEWSTATE=" + getElementValueByID(ticket_html, "__VIEWSTATE") + "&__VIEWSTATEGENERATOR=" + getElementValueByID(ticket_html, "__VIEWSTATEGENERATOR") + "&__VIEWSTATEENCRYPTED=&" + getElementValueByID(ticket_html, "__VIEWSTATEENCRYPTED") + "&txtMemberCardNO=16881270&txtMemberName=&txtStartData=2016-12-01&txtStartTime=00%3A00%3A00&txtEndData=2016-12-29&txtEndTime=23%3A59%3A59&txtPNR=&txtOperatorName=&txtFlight=&txtAirLine=&txtGuestName=&txtGuestCardNo=&txtOrderID=&ddlOrderStatus=&ddlOrderSource=&ddlactivecode=0&txtMobile=&txtTicketNo=&txtKXOrderId=&ddlPayType=2&ddlOrderType=0&OraclePager1%24PageList=" + count; ticket_html = spider.POST(main_url + "Ticket/Ticket/TicketOrderList.aspx?TopMenuID=3&LeftMenuID=306", ticket_postdata, main_url + "Ticket/Ticket/TicketOrderList.aspx?TopMenuID=3&LeftMenuID=306", Encoding.GetEncoding("GB2312"));
結果服務器返回
Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page.
For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected,
use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.
坑爹的,根本獲取不到想要的第二頁數據