我正在向一个使用Asp.Net创建的网站提出请求。我使用Python会话获取__VIEWSTATE和__EVENTVALIDATION变量,并将它们添加回数据有效负载。
response = s.get(url, headers=headers)
soup = BeautifulSoup(response.content, 'lxml')
viewstate = soup.find(id='__VIEWSTATE').get('value')
eventvalidation = soup.find(id='__EVENTVALIDATION').get('value')
payload.update({'__VIEWSTATE': viewstate, '__EVENTVALIDATION': eventvalidation})
session.post(url, headers=headers, data=payload)在我对具有onchange of javascript:setTimeout('__doPostBack(\'ctl00$ContentPlaceHolder1$Chooser$Segment\',\'\')', 0)的表单执行操作之前,这段代码工作得很好。我必须在几个input上执行这个操作,这样就有了多个eventTarget。
当我修改附加到__doPostBack()函数的任何表单元素时,我会收到以下消息:
无效回发或回调参数
来自Asp.Net。
如何模拟多个__doPostBack,以避免__VIEWSTATE和__EVENTVALIDATION返回错误?
发布于 2022-08-04 17:15:25
ASP.NET有隐藏的输入,当您提交响应时,需要将所有这些输入返回到ASP。
因此,当您丢弃web时,获取响应,并处理这些内容。
def __get_hidden_input(self, content):
""" Return the dict contain the hidden input
"""
tags = dict()
soup =BeautifulSoup(content, 'html.parser')
hidden_tags = soup.find_all('input', type='hidden')
# print(*hidden_tags)
for tag in hidden_tags:
tags[tag.get('name')] = tag.get('value')
return tags然后,使用请求的其他表单数据单独更新这些dict数据。例如__EVENTTARGET,然后将其发送回服务器。
r=sess.get(base_frm)
attrs = self.__get_hidden_input(r.content)
attrs.update({'__EVNETDATA':'your_target'})
r=sess.post(base_frm, data=attrs)https://stackoverflow.com/questions/69170069
复制相似问题