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

      網(wǎng)友投稿 888 2025-04-02

      最近學(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)于WebBrowser和HttpWebRequest方法,但能力有限,很多東西還是沒有實(shí)現(xiàn)成功,還在繼續(xù)研究中。

      下面先講講我該階段唯一的收獲:通過WebBrowser實(shí)現(xiàn)簡單瀏覽器自動(dòng)登錄技術(shù)。WebBrowser是一個(gè)簡單瀏覽器,允許用戶在該控件內(nèi)瀏覽網(wǎng)頁,其實(shí)就是封裝了IE接口,實(shí)現(xiàn)GET/POST功能在WebBrowser的DocumentCompeted中實(shí)現(xiàn)。

      在“C#網(wǎng)絡(luò)編程之最簡單瀏覽器實(shí)現(xiàn)”(C# 網(wǎng)絡(luò)編程之最簡單瀏覽器實(shí)現(xiàn)_楊秀璋的專欄-CSDN博客)中我通過WebBrowser控件完成了一個(gè)最簡單的瀏覽器,這里實(shí)在該程序基礎(chǔ)上繼續(xù)完成網(wǎng)頁自動(dòng)登錄的功能實(shí)現(xiàn)。

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

      界面如上,主要是添加一個(gè)WebBrowser控件。設(shè)置的詳細(xì)參數(shù)見網(wǎng)址:C# 網(wǎng)絡(luò)編程之最簡單瀏覽器實(shí)現(xiàn)_楊秀璋的專欄-CSDN博客

      重點(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í)最重要的是思想。

      using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; //新添加命名空間 using System.Net; using System.IO; namespace HttpWeb { public partial class Form1 : Form { public Form1() { InitializeComponent(); } //雙擊"瀏覽"添加Click事件 private void button1_Click(object sender, EventArgs e) { //獲取輸入的URL string url = textBox1.Text; //string url = "http://mail.163.com/"; //創(chuàng)建http鏈接 //HttpWebRequest對(duì)象實(shí)例:該類用于獲取和操作HTTP請(qǐng)求 var可改成HttpWebRequest var request = (HttpWebRequest)WebRequest.Create(url); //創(chuàng)建WebRequest對(duì)象 //HttpWebResponse對(duì)象實(shí)例:該類用于獲取和操作HTTP應(yīng)答 var可改成HttpWebResponse var response = (HttpWebResponse)request.GetResponse(); //GetResponse:獲取答復(fù) //構(gòu)造數(shù)據(jù)流對(duì)象實(shí)例 Stream stream = response.GetResponseStream(); //GetResponseStream:獲取應(yīng)答流 StreamReader sr = new StreamReader(stream); //從字節(jié)流中讀取字符 //從流當(dāng)前位置讀取到末尾并顯示在WebBrower控件中 string content = sr.ReadToEnd(); webBrowser1.DocumentText = content; } //web瀏覽器控件中承載的文檔全部加載后發(fā)生 private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) { //定義html元素 通過Name獲取控件值 //HtmlElement tbUserid = webBrowser1.Document.All["userName"]; //HtmlElement tbPasswd = webBrowser1.Document.All["password"]; //定義html元素 通過ID獲取控件值 (用戶名 密碼 登錄按鈕) HtmlElement tbUserid = webBrowser1.Document.GetElementById("idInput"); HtmlElement tbPasswd = webBrowser1.Document.GetElementById("pwdInput"); HtmlElement btnSubmit = webBrowser1.Document.GetElementById("loginBtn"); //三個(gè)元素其一為空返回 加載后才執(zhí)行賦值 否則會(huì)出現(xiàn)為null值的崩潰錯(cuò)誤 if (tbUserid == null || tbPasswd == null || btnSubmit == null) { return; } //設(shè)置元素value屬性值 (用戶名 密碼值) tbUserid.SetAttribute("value", "Eastmount"); tbPasswd.SetAttribute("value", "Eastmount"); //執(zhí)行元素的方法:如click submit btnSubmit.InvokeMember("click"); } } }

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

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

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

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

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

      其中通過查找該登錄頁面發(fā)現(xiàn)用戶名Id為“idInput”,密碼Id為“pwdInput”,登錄按鈕ID為“l(fā)oginBtn”。如下圖id和name:

      注意:上面的值“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)步!感恩能與大家在華為云遇見!希望能與大家一起在華為云社區(qū)共同成長。

      (By:娜璋之家 Eastmount 2021-10-25 夜于武漢)

      C# 網(wǎng)絡(luò)

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:wps怎么拆分表格圖文教程(如何拆分wps表格)
      下一篇:優(yōu)化SQL查詢:如何寫出高性能SQL語句
      相關(guān)文章
      国产精品亚洲片在线| 处破女第一次亚洲18分钟| 亚洲AV无码一区二区大桥未久| 久久久无码精品亚洲日韩按摩| 亚洲性在线看高清h片| 国产99久久亚洲综合精品| 亚洲AV无码一区二区三区久久精品 | 亚洲AV香蕉一区区二区三区| 国产亚洲玖玖玖在线观看| 99999久久久久久亚洲| 亚洲乱码在线播放| 亚洲乱码一二三四区国产| 亚洲免费视频网址| 天天爽亚洲中文字幕| 亚洲午夜无码久久久久小说| 亚洲一区二区三区成人网站| 亚洲免费综合色在线视频| 亚洲狠狠婷婷综合久久| 亚洲AV无码专区亚洲AV桃| 欧美日韩亚洲精品| 亚洲精品A在线观看| 久久亚洲av无码精品浪潮| 国产偷国产偷亚洲清高动态图 | 亚洲成AV人片久久| 亚洲一本之道高清乱码| 国产.亚洲.欧洲在线| 亚洲欧美日韩中文二区| 久久亚洲中文无码咪咪爱| 亚洲av无码乱码在线观看野外 | 久久精品亚洲一区二区| 亚洲视频在线观看地址| 亚洲国产精品成人精品软件| 亚洲国产系列一区二区三区| 亚洲国产AV一区二区三区四区| 亚洲成AV人网址| 日韩va亚洲va欧洲va国产| 亚洲综合激情九月婷婷| 亚洲香蕉在线观看| 日韩欧美亚洲中文乱码| 中文字幕精品无码亚洲字| 亚洲国产成人精品无码区在线观看|