小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

C# 網(wǎng)絡(luò)編程之網(wǎng)頁自動(dòng)登錄 (一).使用WebBrower控件模仿登錄

 NaturalWill 2014-05-06

最近學(xué)習(xí)C#網(wǎng)絡(luò)編程中,想實(shí)現(xiàn)網(wǎng)頁自動(dòng)登錄并提交GET/POST信息,再實(shí)現(xiàn)循環(huán)登錄不斷發(fā)送報(bào)文給服務(wù)器,服務(wù)器發(fā)送消息給客戶端記錄能登錄的賬戶和密碼,做到后面實(shí)現(xiàn)繞過驗(yàn)證碼、動(dòng)態(tài)抓取登錄位置等,但由于資料很少、進(jìn)度緩慢,下面這篇文章僅供大家交流閱讀。
也許你可能看過一篇文章關(guān)于C#實(shí)現(xiàn)POST提交方式中三種提取網(wǎng)頁HTML的方法:WebBrowser、WebClient、HttpWebRequest。我也看了很多人的博客,尤其是關(guān)于WebBrowserHttpWebRequest方法,但能力有限,很多東西還是沒有實(shí)現(xiàn)成功,還在繼續(xù)研究中。
下面先講講我該階段唯一的收獲:
通過WebBrowser實(shí)現(xiàn)簡單瀏覽器自動(dòng)登錄技術(shù)。WebBrowser是一個(gè)簡單瀏覽器,允許用戶在該控件內(nèi)瀏覽網(wǎng)頁,其實(shí)就是封裝了IE接口,實(shí)現(xiàn)GET/POST功能在WebBrowserDocumentCompeted中實(shí)現(xiàn)。
在“C#網(wǎng)絡(luò)編程之最簡單瀏覽器實(shí)現(xiàn)”(
http://blog.csdn.net/eastmount/article/details/9490009)中我通過WebBrowser控件完成了一個(gè)最簡單的瀏覽器,這里實(shí)在該程序基礎(chǔ)上繼續(xù)完成網(wǎng)頁自動(dòng)登錄的功能實(shí)現(xiàn)。

一.   界面設(shè)計(jì)

界面如上,主要是添加一個(gè)WebBrowser控件。設(shè)置的詳細(xì)參數(shù)見網(wǎng)址:http://blog.csdn.net/eastmount/article/details/9490009
重點(diǎn)
:點(diǎn)擊”WebBrowser1”控件為其在屬性對(duì)話框中添加一個(gè)事件DocumentCorr(Web瀏覽器控件中承載的文檔全部加載后發(fā)生)。該程序主要的實(shí)現(xiàn)過程是:
1.點(diǎn)擊按鈕button事件Click中添加簡單瀏覽器功能;
2.再在DocumentCorr事件中查找用戶名、密碼、登錄按鈕三個(gè)html元素——HtmlElement,并賦值設(shè)置登錄狀態(tài)實(shí)現(xiàn)自動(dòng)登錄。

二. 源代碼

我看了很多博客代碼,但自己實(shí)現(xiàn)起來還是非常困難的,所以我填出了所有的代碼并詳細(xì)的注釋及實(shí)現(xiàn)過程,希望能幫助初學(xué)者,高手亦可鞏固知識(shí),對(duì)否!同時(shí)最重要的是思想。

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.ComponentModel;  
  4. using System.Data;  
  5. using System.Drawing;  
  6. using System.Linq;  
  7. using System.Text;  
  8. using System.Threading.Tasks;  
  9. using System.Windows.Forms;  
  10.   
  11. //新添加命名空間  
  12. using System.Net;  
  13. using System.IO;  
  14.   
  15. namespace HttpWeb  
  16. {  
  17.     public partial class Form1 : Form  
  18.     {  
  19.         public Form1()  
  20.         {  
  21.             InitializeComponent();  
  22.         }  
  23.   
  24.         //雙擊"瀏覽"添加Click事件  
  25.         private void button1_Click(object sender, EventArgs e)  
  26.         {  
  27.             //獲取輸入的URL  
  28.             string url = textBox1.Text;  
  29.             //string url = "http://mail.163.com/";  
  30.   
  31.             //創(chuàng)建http鏈接  
  32.             //HttpWebRequest對(duì)象實(shí)例:該類用于獲取和操作HTTP請(qǐng)求 var可改成HttpWebRequest  
  33.             var request = (HttpWebRequest)WebRequest.Create(url);   //創(chuàng)建WebRequest對(duì)象  
  34.   
  35.             //HttpWebResponse對(duì)象實(shí)例:該類用于獲取和操作HTTP應(yīng)答 var可改成HttpWebResponse  
  36.             var response = (HttpWebResponse)request.GetResponse();  //GetResponse:獲取答復(fù)  
  37.   
  38.             //構(gòu)造數(shù)據(jù)流對(duì)象實(shí)例  
  39.             Stream stream = response.GetResponseStream();  //GetResponseStream:獲取應(yīng)答流  
  40.             StreamReader sr = new StreamReader(stream);    //從字節(jié)流中讀取字符  
  41.   
  42.             //從流當(dāng)前位置讀取到末尾并顯示在WebBrower控件中  
  43.             string content = sr.ReadToEnd();  
  44.             webBrowser1.DocumentText = content;  
  45.         }  
  46.   
  47.         //web瀏覽器控件中承載的文檔全部加載后發(fā)生  
  48.         private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)  
  49.         {  
  50.             //定義html元素 通過Name獲取控件值  
  51.             //HtmlElement tbUserid = webBrowser1.Document.All["userName"];  
  52.             //HtmlElement tbPasswd = webBrowser1.Document.All["password"];  
  53.               
  54.             //定義html元素 通過ID獲取控件值 (用戶名 密碼 登錄按鈕)  
  55.             HtmlElement tbUserid = webBrowser1.Document.GetElementById("idInput");  
  56.             HtmlElement tbPasswd = webBrowser1.Document.GetElementById("pwdInput");  
  57.             HtmlElement btnSubmit = webBrowser1.Document.GetElementById("loginBtn");  
  58.   
  59.             //三個(gè)元素其一為空返回 加載后才執(zhí)行賦值 否則會(huì)出現(xiàn)為null值的崩潰錯(cuò)誤  
  60.             if (tbUserid == null || tbPasswd == null || btnSubmit == null)  
  61.             {  
  62.                 return;  
  63.             }  
  64.               
  65.             //設(shè)置元素value屬性值 (用戶名 密碼值)  
  66.             tbUserid.SetAttribute("value", "Eastmount");  
  67.             tbPasswd.SetAttribute("value", "Eastmount");  
  68.               
  69.             //執(zhí)行元素的方法:如click submit  
  70.             btnSubmit.InvokeMember("click");       
  71.         }  
  72.     }  
  73. }  

其實(shí)使用WebBrowser控件實(shí)現(xiàn)網(wǎng)頁自動(dòng)登錄的核心代碼就是:

  1. //獲取網(wǎng)頁元素 (用戶名 密碼 登錄按鈕)  
  2. HtmlElement tbUserid = webBrowser1.Document.GetElementById("idInput");  
  3. HtmlElement tbPasswd = webBrowser1.Document.GetElementById("pwdInput");  
  4. HtmlElement btnSubmit = webBrowser1.Document.GetElementById("loginBtn");  
  5.   
  6. //用相應(yīng)方法為元素賦值  
  7. tbUserid.SetAttribute("value", "Eastmount");  
  8. tbPasswd.SetAttribute("value", "Eastmount");  
  9. btnSubmit.InvokeMember("click");  

三. 運(yùn)行結(jié)果

上面源代碼中是自動(dòng)登錄163郵箱的實(shí)現(xiàn):http://mail.163.com運(yùn)行程序,輸入網(wǎng)址即可實(shí)現(xiàn)自動(dòng)登錄163郵箱。
如圖:

其中通過查找該登錄頁面發(fā)現(xiàn)用戶名Id為“idInput”,密碼Id為“pwdInput”,登錄按鈕ID為“loginBtn”。如下圖id和name:
<inputclass="loginFormTdIpt"tabindex="1"title="請(qǐng)輸入賬號(hào)"id="idInput"name="username"type="text"maxlength="50"value=""..
<inputclass="loginFormTdIpt"tabindex="2"title="請(qǐng)輸入密碼"id="pwdInput"name="password"type="password" autocomplete="off"/>
<buttonid="loginBtn"class="btnbtn-login formSubmit"tabindex="6"type="submit">  </button>

注意:上面的值“Eastmount”、“Eastmount”是被我修改過的值,你需要填寫的是自己的密碼和用戶名。同時(shí)登錄時(shí)會(huì)出現(xiàn)一些亂碼,這些都是編碼問題,有可能有的網(wǎng)站能通過該方法實(shí)現(xiàn)自動(dòng)登錄,有的網(wǎng)站不行,但我提供的是一種思想!
在運(yùn)行時(shí),我首先嘗試的是百度網(wǎng)站,但由于異地登錄有驗(yàn)證碼最終失??;然后采用:
https://passport.csdn.net/account/login但好像CSDN是通過https安全方式登錄也失敗,所以該例僅提供思想?yún)⒖?,最后通過163郵箱和本地網(wǎng)頁實(shí)現(xiàn)了該功能。
本地網(wǎng)址:
http://localhost:1165/WebTest/MyLogin.aspx 查看源代碼可以在用戶名的Id”userName”,密碼Id”password”,登錄按鈕為”loginButton”,用戶名和密碼為1,設(shè)置相應(yīng)的值即可實(shí)現(xiàn)登錄。下圖為瀏覽器顯示本地登錄頁面:


四.總結(jié)

其實(shí)我由于最近研究HttpWebRequest、Cookies較多,更希望通過該類實(shí)現(xiàn)同樣功能,但編寫了幾個(gè)程序還是沒有實(shí)現(xiàn),還在研究中。希望這篇文章能幫助到大家,也不知道我上面的關(guān)于WebBrowser使用的敘述是否正確,如果有錯(cuò)誤或不足之處,更希望大家指正,希望大家多多交流,相互學(xué)習(xí)共同進(jìn)步!
同時(shí)感謝一些博客的博主,下面是一些關(guān)于WebBrowser該方面的博客,有時(shí)間可以看看,我認(rèn)為都是非常優(yōu)秀的文章,同時(shí)我上面講訴的核心思想都與下面的相似的,感謝下面的博主及文章:
 (By:Eastmount 2013-8-1 下午4點(diǎn))
參考資料:
1.C#
網(wǎng)頁自動(dòng)填表自動(dòng)登錄—sonicrang(最簡單的代碼闡述了使用WebBrowser實(shí)現(xiàn)自動(dòng)登錄)
http://blog.csdn.net/sonicrang/article/details/5878611
2.C
#
中的WebBrowser控件的使用方培工作室(詳細(xì)講述了WebBrowser控件中的使用方法)
http://www.cnblogs.com/txw1958/archive/2012/09/24/CSharp-WebBrowser.html
3.C
#
實(shí)現(xiàn)POST提交方式陳立國(最經(jīng)典文章之一,詳細(xì)講述了三種方法:WebBrowserWebClient、HttpWebRequest但不知道最初是那位大師人物寫的)
http://www.cnblogs.com/cgli/archive/2011/04/09/2010497.html
5.C
#
自動(dòng)登錄Login代碼珍惜當(dāng)下(比較完整的代碼講述登錄功能,僅有代碼)
http://hi.baidu.com/zkbob22/item/da897035b65516362e0f8181
6
.
暴力破解網(wǎng)站密碼—相信自己(一個(gè)暴力破解全代碼,重點(diǎn)是思想,萬能密碼嘗試,但我沒有實(shí)現(xiàn)成功)
http://blog.sina.com.cn/s/blog_4de05339010109g7.html
7
.
關(guān)于C#模擬登錄的論壇討論(其中一些代碼比較優(yōu)秀)
http://bbs.csdn.net/topics/330239749?page=1
8
.
編程代碼實(shí)現(xiàn)網(wǎng)站自動(dòng)登錄C#(與我的思想方法類似)
http://wenku.baidu.com/view/bc46ff9d6bec0975f465e208.html
9.C
# WinForm WebBrowser
模擬登錄打卡—Kelvin峰(過于高深,有待以后研究)
http://blog.csdn.net/llftc/article/details/7036746 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多