使用 python 请求登录 ERP Web 失败 ASP.NET



我尝试登录 ASP.NET ERP 网络,因为我很好奇如何使用 Python 请求登录,但我觉得没有进入,这是我的代码:

url=http://xxx.xxx.xxx.xxx/some_site/erp/erp_login.aspx
username=1400020
password="mypassword"
import requests
from bs4 import BeautifulSoup
headers={'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0'}
my_session = s.Session()
my_session.headers.update(headers)
request=my_session.get(url)
beauti=BeautifulSoup(request.content)

这是我解析的HTML

<body>
<form action="erp_login.aspx" class="form-signin" id="form1" method="post" name="form1">
<div>
<input id="__LASTFOCUS" name="__LASTFOCUS" type="hidden" value=""/>
<input id="__EVENTTARGET" name="__EVENTTARGET" type="hidden" value=""/>
<input id="__EVENTARGUMENT" name="__EVENTARGUMENT" type="hidden" value=""/>
<input id="__VIEWSTATE" name="__VIEWSTATE" type="hidden" value="/wEPDwUKMTkwNzM5ODc0MA9kFgICBQ9kFgYCAQ9kFgQCAQ9kFgQCCw8PFgIeBFRleHQFJTw8PCZuYnNwOyZuYnNwO0FEVC1TSlUmbmJzcDsmbmJzcDs+Pj5kZAINDw8WAh8ABV5GaXJlZm94Njggc3NzIEZpcmVmb3ggc3NzIE1vemlsbGEvNS4wIChYMTE7IExpbnV4IHg4Nl82NDsgcnY6NjguMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC82OC4wZGQCBQ9kFgICAQ9kFgICAw8QZGQWAGQCAw8WAh4HVmlzaWJsZWhkAgkPZBYCZg9kFgICAQ9kFgJmD2QWAmYPZBYCAgEPPCsACwBkZGOx36TJfGYxlXBQnUWT0oEjFZMe"/>
</div>
<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
</script>
<script src="/ERP_NEW/WebResource.axd?d=crEqWsFELBbHh-Zn9JwJz0Wc0o-EqMgq2DsgmxYpodKngnF9_tdzROczt7Z1R6CEd_keip4sQ_LfTnxTE8U2GfD44xA1&amp;t=636284885271971599" type="text/javascript"></script>
<script src="/ERP_NEW/ScriptResource.axd?d=a9N1yt0FgpEcl5aXFKCZ2X9SgsJ2qYN-d2KopL4gMypLQPw8LAeF4BHzoYVLzNa9w6-G_V9QlCGdsqPMDC_DebsmRaiEQIqMrJjqn0vIzq34Ir3OoXxewOGM_qPRp2ObV3xImsdYJ7yxmPI7AsXF3F5H3rVupYA6HRhX6Do29jnDyops0&amp;t=3f4a792d" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
if (typeof(Sys) === 'undefined') throw new Error('ASP.NET Ajax client-side framework failed to load.');
//]]>
</script>
<script src="/ERP_NEW/ScriptResource.axd?d=b0YOHYigWFb9TAiz3emuj94HuiB1DWWtIIIDoxURzZz-WQydewo8iaKcx4oOdXWAjcaAZ09X834NxWOfrEuU6SPQtOT09pExt-CrQwLiihsxN9m1SEYem4EBGYazS7IjBxszp7ZffC1LqDSmfa2fQUKVewuCkJpyFhiDMaBfS3Ygj3AI0&amp;t=3f4a792d" type="text/javascript"></script>
<script src="/ERP_NEW/WebResource.axd?d=5JgXfpUlKhMUVz_xTJYrdHEPN6Scl535G99K8bt7avOij7pxmefqvDehHDqufvH43z_-msmtYcyFp4g6-w1tv1Fi2Lk1&amp;t=636284885271971599" type="text/javascript"></script>
<div>
<input id="__VIEWSTATEGENERATOR" name="__VIEWSTATEGENERATOR" type="hidden" value="FD7250D9"/>
<input id="__EVENTVALIDATION" name="__EVENTVALIDATION" type="hidden" value="/wEWBAL3ltW/BgLT8dy8BQK1qbSRCwKFoZPNA1abehnNI7/HTq494AZnY2PWZ6rX"/>
</div>
<div id="tblLogin">
<div class="form-control" id="tdLogin" style="padding:20px;">
<div style="width:100%; margin-bottom:20px">
<div style="display: table; margin: 0 auto;">
<a class="logo" id="A1" style="text-align:center">
<img alt="" src="../img/logo2.png"/>
</a>
</div>
</div>
<div class="input-group mb15">
<span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span>
<label class="sr-only" for="txtUserID">User Id</label>
<input autofocus="" class="form-control" id="txtUserID" name="txtUserID" placeholder="User Id" type="text"/>
</div>
<div class="input-group mb15">
<span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span>
<label class="sr-only" for="txtPassword">Password</label>
<input autofocus="" class="form-control" id="txtPassword" name="txtPassword" placeholder="Password" type="password"/>
</div>
<input class="btn btn-primary btn-block" id="cmdLogin" name="cmdLogin" type="submit" value="Login"/>
<br/>
<p class="text-center" style="font-size:10.5px;font-weight:bold">
<span id="lblServerGroup">&lt;&lt;&gt;&gt;</span>
</p>
<p class="text-muted text-center" style="font-size:8.5px">© 2019, xxxx xxxx Group</p>
<p class="text-muted text-center" style="font-size:8.5px">
<span id="lblTest" style="color:white">Firefox68 sss Firefox sss Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0</span>
</p>
</div>
<div id="pnlFilter" onkeypress="javascript:return WebForm_FireDefaultButton(event, 'cmdSelect')">
</div>
</div>
<div class="fdtl" id="divDialogDocList" style="display:none;">
<script type="text/javascript">
//<![CDATA[
Sys.WebForms.PageRequestManager._initialize('ScriptManager1', document.getElementById('form1'));
Sys.WebForms.PageRequestManager.getInstance()._updateControls(['tup_DocList'], [], [], 90);
//]]>
</script>
<div id="up_DocList">
<table align="center" border="0" cellpadding="9" cellspacing="1" class="tbl" id="pnl_DocList">
<tr class="dtl_c">
<td>
</td>
</tr>
</table>
</div>
</div>
<script type="text/javascript">
//<![CDATA[
WebForm_AutoFocus('txtUserID');Sys.Application.initialize();
//]]>
</script>
</form>
</body>

然后我为请求构建数据

VIEWSTATE=beau.find(id="__VIEWSTATE")['value']
VIEWSTATEGENERATOR=beau.find(id="__VIEWSTATEGENERATOR")['value']
EVENTVALIDATION=beau.find(id="__EVENTVALIDATION")['value']
txtUserID=username
txtPassword=password
login_data:{
"__VIEWSTATE":VIEWSTATE,
"__VIEWSTATEGENERATOR":VIEWSTATEGENERATOR,
"__EVENTVALIDATION":EVENTVALIDATION,
"txtUserID":txtUserID,
"txtPassword":txtPassword}
request_2 = my_session.post(url, data=login_data)

然后解析了 html,页面似乎没有改变

BeautifulSoup(request_2.content)
<body>
<form action="erp_login.aspx" class="form-signin" id="form1" method="post" name="form1">
<div>
<input id="__EVENTTARGET" name="__EVENTTARGET" type="hidden" value=""/>
<input id="__EVENTARGUMENT" name="__EVENTARGUMENT" type="hidden" value=""/>
<input id="__VIEWSTATE" name="__VIEWSTATE" type="hidden" value="/wEPDwUKMTkwNzM5ODc0MA9kFgICBQ9kFgYCAQ9kFgQCAQ9kFgQCCw8PFgIeBFRleHQFJTw8PCZuYnNwOyZuYnNwO0FEVC1TSlUmbmJzcDsmbmJzcDs+Pj5kZAINDw8WAh8ABV5GaXJlZm94Njggc3NzIEZpcmVmb3ggc3NzIE1vemlsbGEvNS4wIChYMTE7IExpbnV4IHg4Nl82NDsgcnY6NjguMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC82OC4wZGQCBQ9kFgICAQ9kFgICAw8QZGQWAGQCAw8WAh4HVmlzaWJsZWhkAgkPZBYCZg9kFgICAQ9kFgJmD2QWAmYPZBYCAgEPPCsACwBkZGOx36TJfGYxlXBQnUWT0oEjFZMe"/>
</div>
<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
</script>
<script src="/ERP_NEW/WebResource.axd?d=crEqWsFELBbHh-Zn9JwJz0Wc0o-EqMgq2DsgmxYpodKngnF9_tdzROczt7Z1R6CEd_keip4sQ_LfTnxTE8U2GfD44xA1&amp;t=636284885271971599" type="text/javascript"></script>
<script src="/ERP_NEW/ScriptResource.axd?d=a9N1yt0FgpEcl5aXFKCZ2X9SgsJ2qYN-d2KopL4gMypLQPw8LAeF4BHzoYVLzNa9w6-G_V9QlCGdsqPMDC_DebsmRaiEQIqMrJjqn0vIzq34Ir3OoXxewOGM_qPRp2ObV3xImsdYJ7yxmPI7AsXF3F5H3rVupYA6HRhX6Do29jnDyops0&amp;t=3f4a792d" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
if (typeof(Sys) === 'undefined') throw new Error('ASP.NET Ajax client-side framework failed to load.');
//]]>
</script>
<script src="/ERP_NEW/ScriptResource.axd?d=b0YOHYigWFb9TAiz3emuj94HuiB1DWWtIIIDoxURzZz-WQydewo8iaKcx4oOdXWAjcaAZ09X834NxWOfrEuU6SPQtOT09pExt-CrQwLiihsxN9m1SEYem4EBGYazS7IjBxszp7ZffC1LqDSmfa2fQUKVewuCkJpyFhiDMaBfS3Ygj3AI0&amp;t=3f4a792d" type="text/javascript"></script>
<div>
<input id="__VIEWSTATEGENERATOR" name="__VIEWSTATEGENERATOR" type="hidden" value="FD7250D9"/>
<input id="__EVENTVALIDATION" name="__EVENTVALIDATION" type="hidden" value="/wEWBAL3ltW/BgLT8dy8BQK1qbSRCwKFoZPNA1abehnNI7/HTq494AZnY2PWZ6rX"/>
</div>
<div id="tblLogin">
<div class="form-control" id="tdLogin" style="padding:20px;">
<div style="width:100%; margin-bottom:20px">
<div style="display: table; margin: 0 auto;">
<a class="logo" id="A1" style="text-align:center">
<img alt="" src="../img/logo2.png"/>
</a>
</div>
</div>
<div class="input-group mb15">
<span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span>
<label class="sr-only" for="txtUserID">User Id</label>
<input autofocus="" class="form-control" id="txtUserID" name="txtUserID" placeholder="User Id" type="text" value="1400020"/>
</div>
<div class="input-group mb15">
<span class="input-group-addon"><i class="glyphicon glyphicon-lock"></i></span>
<label class="sr-only" for="txtPassword">Password</label>
<input autofocus="" class="form-control" id="txtPassword" name="txtPassword" placeholder="Password" type="password"/>
</div>
<input class="btn btn-primary btn-block" id="cmdLogin" name="cmdLogin" type="submit" value="Login"/>
<br/>
<p class="text-center" style="font-size:10.5px;font-weight:bold">
<span id="lblServerGroup">&lt;&lt;&gt;&gt;</span>
</p>
<p class="text-muted text-center" style="font-size:8.5px">© 2019, xxxx xxxx Group</p>
<p class="text-muted text-center" style="font-size:8.5px">
<span id="lblTest" style="color:white">Firefox68 sss Firefox sss Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0</span>
</p>
</div>
<div id="pnlFilter" onkeypress="javascript:return WebForm_FireDefaultButton(event, 'cmdSelect')">
</div>
</div>
<div class="fdtl" id="divDialogDocList" style="display:none;">
<script type="text/javascript">
//<![CDATA[
Sys.WebForms.PageRequestManager._initialize('ScriptManager1', document.getElementById('form1'));
Sys.WebForms.PageRequestManager.getInstance()._updateControls(['tup_DocList'], [], [], 90);
//]]>
</script>
<div id="up_DocList">
<table align="center" border="0" cellpadding="9" cellspacing="1" class="tbl" id="pnl_DocList">
<tr class="dtl_c">
<td>
</td>
</tr>
</table>
</div>
</div>
<script type="text/javascript">
//<![CDATA[
Sys.Application.initialize();
//]]>
</script>
</form>
</body>

我的问题我错过了什么..? 感谢您的解释

在失败和几次重试后,我发现了问题,以下是解决方案:

  1. 我用 Wireshark 分析了 http 数据包,很明显我错过了login_data上的一些参数值(__LASTFOCUS、__EVENTTARGET__EVENTARGUMENTcmdLogin(,所以我的字典login_data这样结束:

    {'__LASTFOCUS': '', "__EVENTTARGET": ", "__EVENTARGUMENT": ", '__VIEWSTATE': '/wEPDwUKMTkwNzM5ODc0MA9kFgICBQ9kFgYCAQ9kFgQCAQ9kFgQCCw8PFgIeBFRleHQFJTw8PCZuYnNwOyZuYnNwO0FEVC1TSlUmbmJzcDsmbmJzcDs+Pj5kZAINDw8WAh8ABV5GaXJlZm94Njggc3NzIEZpcmVmb3ggc3NzIE1vemlsbGEvNS4wIChYMTE7 IExpbnV4IHg4Nl82NDsgcnY6NjguMCkgR2Vja28vMjAxMDAxMDEgRmlyZWZveC82OC4wZGQCBQ9kFgICAQ9kFgICAw8QZGQWAGQCAw8WAh4HVmlzaWJsZWhkAgkPZBYCZg9kFgICAQ9kFgJmD2QWAmYPZBYCAgEPPCsACwBkZGOx36TJfGYxlXBQnUWT0oEjFZMe', "__VIEWSTATEGENERATOR": "FD7250D9", '__EVENTVALIDATION': '/wEWBAL3ltW/BgLT8dy8BQK1qbSRCwKFoZPNA1abehnNI7/HTq494AZnY2PWZ6rX', 'txtUserID': 'myuserID, "txt密码": "我的密码", 'cmdLogin': 'Login'}

  2. 随请求一起发布数据

    r2 = requests.post(url, data=login_data(

它有效!,所以我的结论是,如果我们想要带有 Python 请求的表单验证数据,请不要错过具有价值归属HTML 标签

最新更新