c#登陆qq空间无视JS加密

</pre><p>很早就有想法写出一个能无视加密的万能登陆的帮助类,本人也属于比较懒的类型一直没有写出来,如果是一般的网站模拟登陆还比较好处理,但是遇到淘宝或者qq空间之类你的网站时就比较难处理了。其实我们可以通过.Net给我们提供的WebBrowser空间来进行模拟点击从而获取登陆后的Cookie,这样子完全是真实的登陆,所以可以直接无视js加密。就在前几天心血来潮写了一个登陆QQ空间的程序,大家可以参考下,这里还没有做到通用目前还在写,大家如果有更好的想法也可以加入自己的想法,思路其实还是很简单的。Demo的下载地址:<a target=_blank href="http://www.studycsharp.com/forum.php?mod=viewthread&tid=17" target="_blank">C#登陆QQ空间</a></p><p></p><p><pre name="code" class="csharp">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Forms;
using System.Diagnostics;
using System.Threading;
using System.Runtime.InteropServices;
namespace LoginUtil
{
    /// <summary>
    /// 万能登录类
    /// 使用的时候尽量开在子线程中,因为GetCookie方法在使用的过程中受网络影响会有堵塞。
    /// </summary>
    public class LoginUtils
    {
        [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern bool InternetGetCookieEx(string pchURL, string pchCookieName, StringBuilder pchCookieData, ref uint pcchCookieData, int dwFlags, IntPtr lpReserved);
        [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern int InternetSetCookieEx(string lpszURL, string lpszCookieName, string lpszCookieData, int dwFlags, IntPtr dwReserved);
        private static WebBrowser web = new WebBrowser();
        private static bool LoginScuess = false;//是否登录成功
        private static string ScuessTag2 = "";//登录成功标记
        private static string Cookie = "";//登录成功的Cookie;
        private static bool IsCompleted = false;//是否加载完成
        private static Stopwatch watch = new Stopwatch();//计时器 计算超时间
        static LoginUtils()
        {
            web.ScriptErrorsSuppressed = true;//取消js抱错弹窗,不然会一直提示js错误
            web.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(web_DocumentCompleted);//注册WebBrowser加载页面完成的事件
        }

       /// <summary>
        /// WebBrowser加载页面为按成事件
       /// </summary>
       /// <param name="sender"></param>
       /// <param name="e"></param>
       static  void web_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            IsCompleted = true;
            if (web.DocumentText.Contains(ScuessTag2))
            {
                LoginScuess = true;
                Cookie = GetCookies(e.Url.ToString());//利用win32 api获取Cookie  这样子的不会出现Cookie获取不全的现象
            }
        }

        /// <summary>
        /// 万能登录方法
        /// </summary>
        /// <param name="UserNameDomID">用户名输入框的ID</param>
        /// <param name="PassWordDomID">密码输入框的ID</param>
        /// <param name="UserName">用户名</param>
        /// <param name="PassWord">密码</param>
        /// <param name="ScusessTag">成功标记</param>
        /// <returns></returns>
       public static string GetCookie(string LoginPageUrl, string UserNameDomID, string PassWordDomID, string LoginButtonDomID, string UserName, string PassWord, string ScuessTag)
        {
            try
            {
                IsCompleted = false;
                LoginScuess = false;
                ScuessTag2 = ScuessTag;
                web.Navigate(LoginPageUrl);
                while (web.ReadyState != WebBrowserReadyState.Complete)
                {
                    System.Windows.Forms.Application.DoEvents();
                }
                HtmlDocument htmlDoc = web.Document;
                HtmlElement qqNumber = htmlDoc.GetElementById(UserNameDomID);
                qqNumber.SetAttribute("value", UserName);
                HtmlElement qqPassword = htmlDoc.GetElementById(PassWordDomID);
                qqPassword.SetAttribute("value", PassWord);
                HtmlElement btnLoginQzone = htmlDoc.GetElementById(LoginButtonDomID);
                if (btnLoginQzone != null)
                {
                    btnLoginQzone.InvokeMember("click");
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
            watch.Start();//启动计时器
            while (!LoginScuess)
            {
                System.Windows.Forms.Application.DoEvents();
                if (watch.Elapsed.TotalSeconds >= 20) //10秒超时
                {
                    break;
                }
            }
            return Cookie;
        }


       public static string GetCookies(string url)
       {
           uint pcchCookieData = 0x100;
           StringBuilder pchCookieData = new StringBuilder((int)pcchCookieData);
           if (!InternetGetCookieEx(url, null, pchCookieData, ref pcchCookieData, 0x2000, IntPtr.Zero))
           {
               if (pcchCookieData < 0)
               {
                   return null;
               }
               pchCookieData = new StringBuilder((int)pcchCookieData);
               if (!InternetGetCookieEx(url, null, pchCookieData, ref pcchCookieData, 0x2000, IntPtr.Zero))
               {
                   return null;
               }
           }
           return pchCookieData.ToString();
       }


    }
}






  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值