.net 模擬登陸Post提交

 最近在作一個項目,要求集成到第三方系統中,因爲先前沒有作過相似的活,因此折騰了幾天,蹭着有閒情的時候記錄一下。php

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

1. 非Asp.net開發的網站

      咱們拿www.51cto.com來作實例,首先進入www.51cto.com,點擊登陸,就進入到該博客的登陸頁面。使用Google瀏覽器,按下F12,找到其表單的action值,能夠發現其action值爲 http://home.51cto.com/index.php?s=/Index/doLogin,而後點擊帳號和密碼的文本框,右擊鼠標,審查元素,分別找到其對應的name值。web

下面的代碼是帳號文本框的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代碼,以下ide

<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代碼,進行表單提交post

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:這三個的值,彷佛不重要,能夠隨便填的]this

2. ASP.net開發的網站

       爲什麼要將Asp.net開發的網站拿出來單獨說明,這和它背後的實現技術有關係,詳細不說明,直接看實例。我發現博客園正好是用Asp.net開發的,因此咱們就拿博客園做爲實例來說,同上面的操做同樣,咱們進入登陸頁面找到咱們想要的幾個元素。spa

       首先,咱們咱們寫上和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,咱們繼續運行程序,發現用戶名是傳入了,可是仍是不能進入系統中,爲何呢? 進過測試發現是按鈕沒有傳入,因此咱們接着改改代碼

複製代碼
<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值,根據實際狀況咱們或許須要改改其值。修改後的另一種代碼形式

複製代碼
<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() %>"

    4. 靜態網頁抓取,動態網頁抓取,模擬登錄日誌: 

      http://www.crifan.com/note_about_website_crawl_and_emulate_login/

相關文章
相關標籤/搜索