VIEWSTATE等参数

Posted sumuyi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VIEWSTATE等参数相关的知识,希望对你有一定的参考价值。

网站:http://www.sci99.com/targetprice/
网站通过点击日历来切换内容,使用Ajax,刷新的数据包只有数据那一块区域。

技术图片

 

通过post请求获取日期对应的内容,刚开始只构造selecttime,结果获得的日期还是默认的

技术图片

 

所以还要构造中间几个参数:__VIEWSTATE、__VIEWSTATEGENERATOR、__EVENTVALIDATION。

__VIEWSTATE这些参数是啥呢,复制了一段话:由于http是无记忆无状态的协议。页面传值给服务器,都是通过form表单,且控件自己必须有name属性与value才可以得到值。但是像显示动态信息很多情况下并不都是使用满足上述条件的控件,所以需要将http伪装为有记忆的。而viewstate就是可以事先这个伪装术的策略。

虽然不是很明白,反正就是要先得到这几个参数就对了。

先使用getHiddenvalue()获取三个参数,再放到formData里即可

def getHiddenvalue():
    request = urllib.request.Request(URL, headers=header)
    reponse = urllib.request.urlopen(request)
    resu = reponse.read()
    page = resu.decode(utf-8)
    vs = re.search(r<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="(.*?)" />, page)
    vsg = re.search(
        r<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="(.*?)" />, page)
    ev = re.search(
        r<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="(.*?)" />, page)
    html = etree.HTML(page)
    return vs.group(1), vsg.group(1), ev.group(1)

获取网页函数:

def getPage(date):
    vs, vsg, ev = getHiddenvalue()
    data = {
        "ScriptManager1": "UpdatePanel1|btn_search",
        "selecttime": date,
        "__VIEWSTATE": vs,
        "__VIEWSTATEGENERATOR": vsg,
        "__EVENTVALIDATION": ev,
        "__ASYNCPOST": "true",
        "btn_search": ""
    }
    formData = urlencode(data)
    page = requests.post(URL, data=formData, headers=header)
    page.encoding = "UTF-8"
    return page.text

 

 

 

以上是关于VIEWSTATE等参数的主要内容,如果未能解决你的问题,请参考以下文章

关于post包参数VIEWSTATE

Java用JSoup组件提取asp.net webform开发网页的viewstate相关相关参数

Atitit 视图状态ViewState)的原理与管理

动态控件更改后“无法加载 ViewState”

Viewstate 仅在 IE 中失败

asp.net c# MVC:没有 ViewState 我该如何生活?