模擬登錄


      最近在做一個項目,要求集成到第三方系統中,由於先前沒有做過類似的活,所以折騰了幾天,蹭着有閑情的時候記錄一下。

以下實例,都是我用Asp.net語言進行開發的,關於HTML元素的獲取,使用的是Google瀏覽器。

1. 非Asp.net開發的網站

      我們拿www.51cto.com來做實例,首先進入www.51cto.com,點擊登錄,就進入到該博客的登錄頁面。使用Google瀏覽器,按下F12,找到其表單的action值,可以發現其action值為 http://home.51cto.com/index.php?s=/Index/doLogin,然后點擊賬號和密碼的文本框,右擊鼠標,審查元素,分別找到其對應的name值。

下面的代碼是賬號文本框的html代碼,我們要的是其name屬性,發現只為email,同樣的方法我們可以得到密碼的name屬性。

<input name="email" type="text" class="login_shuru1" onfocus="this.className='login_shuru2';if (this.value=='用戶名/注冊郵箱') {this.value=''}" onblur="this.className='login_shuru1';if (this.value=='') {this.value='用戶名/注冊郵箱'}" value="用戶名/注冊郵箱">

我們要的基本元素都已經,現在我們就可以模擬登錄51cto了,新建一個Asp.net的項目,寫上幾行html代碼,如下

<form action="http://home.51cto.com/index.php?s=/Index/doLogin" method="post" name="_DominoForm" id="form1" >
        <input name="email" id="email" type="hidden" value="whonest@sohu.com" />
        <input name="passwd" id="passwd" type="hidden" value="password" />
</form>

然后再寫兩行JS代碼,進行表單提交

var theForm = document.getElementById('form1');
theForm.submit();

現在運行程序看一下,如果填寫的用戶名和密碼正確的話,發現就已經模擬登錄到51cto的網站了。

[多說一句:如果登錄失敗,和該網站的按鈕有點關系,按鈕是圖片按鈕,用審查元素的方法,找到button的name屬性,在Form表單下添加下面幾行代碼就可以了。]

<input type="hidden" name="button" id="button" value="登陸" />
<input type='hidden' name='button.x' id='button.x' value='26' />
<input type='hidden' name='button.y' id='button.y' value='86' />

[PS:這三個的值,似乎不重要,可以隨便填的]

2. ASP.net開發的網站

       為何要將Asp.net開發的網站拿出來單獨說明,這和它背后的實現技術有關系,詳細不說明,直接看實例。我發現博客園正好是用Asp.net開發的,所以我們就拿博客園作為實例來講,同上面的操作一樣,我們進入登錄頁面找到我們想要的幾個元素。

       首先,我們我們寫上和1類似的代碼,如下

<form action="http://passport.cnblogs.com/login.aspx" method="post" name="form1"
    id="form1">
    <input name="tbUserName" id="tbUserName" type="hidden" value="TowerKing" />
    <input name="tbPassword" type="txtPWD" id="tbPassword" value="password" />
</form>

運行程序,我們發現壓根就沒什么發現,只是進入了一個普通的登錄頁面而已。細心的朋友應該會發現,其源碼中有幾個隱藏的div層下的input,分別是__LASTFOCUS、__EVENTARGUMENT、__EVENTTARGET、__VIEWSTATE和__EVENTVALIDATION,我們在這里比較有用的就是__VIEWSTATE和__EVENTVALIDATION這兩個玩意兒,所以我們得把代碼做個簡單的修改,修改后的代碼如下所示

<form action="http://passport.cnblogs.com/login.aspx" method="post" name="form1"
    id="form1">
    <input name="tbUserName" id="tbUserName" type="hidden" value="TowerKing" />
    <input name="tbPassword" type="txtPWD" id="tbPassword" value="password" />
    <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE1MzYzODg2NzZkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYBBQtjaGtSZW1lbWJlcm1QYDyKKI9af4b67Mzq2xFaL9Bt" />
    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWBQLWwpqPDQLyj/OQAgK3jsrkBALR55GJDgKC3IeGDE1m7t2mGlasoP1Hd9hLaFoI2G05" />
</form>

有人會問,這兩個屬性怎么傳值,其實很簡單,查看源代碼,把我們看到的值直接復制過來就行了。OK,我們繼續運行程序,發現用戶名是傳入了,但是還是不能進入系統中,為什么呢? 進過測試發現是按鈕沒有傳入,所以我們接着改改代碼

View Code
<form action="http://passport.cnblogs.com/login.aspx" method="post" name="form1"
    id="form1">
    <input name="tbUserName" id="tbUserName" type="hidden" value="TowerKing" />
    <input name="tbPassword" type="hidden" id="tbPassword" value="password" />
    <input type="hidden" name="btnLogin" id="btnLogin" value="登陸" />
    <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE1MzYzODg2NzZkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYBBQtjaGtSZW1lbWJlcm1QYDyKKI9af4b67Mzq2xFaL9Bt" />
    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWBQLWwpqPDQLyj/OQAgK3jsrkBALR55GJDgKC3IeGDE1m7t2mGlasoP1Hd9hLaFoI2G05" />
</form>

再運行程序,就發現已經成功登錄了。[PS:如果登錄按鈕是圖片按鈕,就要參考1的多說一句里面的代碼來完成了]

      傳入按鈕的方式,除了為按鈕賦值,還有一種方式,就是為我們先前提到的__EVENTTARGET,賦值為btnLogin,這個是博客園登錄按鈕的name值,根據實際情況我們或許需要改改其值。修改后的另外一種代碼形式

View Code
<form action="http://passport.cnblogs.com/login.aspx" method="post" name="form1" id="form1">
    <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="btnLogin" />
    <input name="tbUserName" id="tbUserName" type="hidden" value="TowerKing" />
    <input name="tbPassword" type="hidden" id="tbPassword" value="password" />
    <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE1MzYzODg2NzZkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYBBQtjaGtSZW1lbWJlcm1QYDyKKI9af4b67Mzq2xFaL9Bt" />
    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWBQLWwpqPDQLyj/OQAgK3jsrkBALR55GJDgKC3IeGDE1m7t2mGlasoP1Hd9hLaFoI2G05" />
</form>

 

3. 為了靈活性

      在項目中我們往往需要根據實際情況傳入不同的值,這樣我們就可以使用JS傳入值,在ASP.net中,使用JS調用后台代碼是很方便的,其寫法形式如下

var actionUrl = "<%= this.GetActionUrl() %>"

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM