您的位置:首页 > 其它

站外登录的实现(BS版的无忧登录),不支持验证码

2010-11-12 00:09 399 查看
[b]应用场景 [/b] 客户需求是个网站信息管理中心,保存很多站点后台的用户名及密码,要让中心用户可以通过页面浏览可以直接登录到相应站点后台。

第一种 最简单的方法调用Interop.SHDocVw.dll打开个IE,提交相应数据过去就可以了。

可以参考:使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie
实现如下:

说明:tbUserName={0}&tbPassword={1}&btnLogin={2}是相应控件Name。


第二种方法 利用mshtml命名空间实现表单赋值。

可以参考c# 控制IE浏览器

具体实现如下:

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Diagnostics;
using System.IO;

using SHDocVw;
using System.Text;
using System.Net;
using mshtml;

namespace WebApplication2
{
public partial class login2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string URI = "***";
var ie = new InternetExplorer();
object vPost, vHeaders, vFlags, vTargetFrame;
vPost = null;
vFlags = null;
vTargetFrame = null;
vHeaders = "Content-Type: application/x-www-form-urlencoded" + Convert.ToChar(10) + Convert.ToChar(13);

ie.Visible = true;
ie.Navigate(URI, ref vFlags, ref vTargetFrame, ref vPost, ref vHeaders);
try
{
System.Threading.Thread.Sleep(1000);
HTMLDocument doc = (HTMLDocument)ie.Document;
HTMLInputElement keyword = (HTMLInputElement)doc.getElementById("tbUserName");
keyword.value = "***";

HTMLInputElement keyword1 = (HTMLInputElement)doc.getElementById("tbPassword");
keyword1.value = "***";

HTMLInputElement submit = (HTMLInputElement)doc.getElementById("btnLogin");
submit.click();
}
catch (Exception)
{

return;
}
}
}
}


第三种方法 是自己调用底层dll 来实现打开IE,并对表单赋值。调用的类为I ELoginHelper,

客户端实现如下:

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using IELoginHelper;

namespace WebApplication2
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}

protected void Button1_Click(object sender, EventArgs e)
{
IEHelper ie = new IEHelper();
ie.OpenAVisibleBlankDocument();

object p = null;

string url = @"***";
bool ret = ie.Navigate(url, ref p, ref p, ref p, ref p);

ie.SetValueById("txtusername", "***");
ie.SetValueById("txtpwd", "***");
ie.ClickButtonByName("***");

}
}
}



第一种第二种如果客户端页面JS出错,Button按钮Type不是Submit按钮等可能会出异常。

附件: IELoginHelper.rar

WebApplication2.rar
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: