.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/

相关文章
相关标签/搜索