1. 程式人生 > >操縱IE瀏覽器模擬使用者登入CSDN

操縱IE瀏覽器模擬使用者登入CSDN

大多數C#程式設計師對於使用HttpRequest、HttpResponse、WebClient這樣的類向Web伺服器發出請求並取得響應結果並不陌生。

但有時我們想模擬使用者操縱瀏覽器的場景(尤其是在自動化測試時),那麼我們可以選擇使用mshtml.dll和shdocvw.dll來完成對IE DOM的操作以實現此功能。

首先我們新建一個Console專案,並新增對mshtml.dll(新增引用--.NET選項卡--Microsoft.mshtml)和shdocvw.dll(新增引用--COM選項卡--Microsoft Internet Controls)的引用。

詳細內容請參考程式碼註釋

  1. using System;  
  2. using System.Diagnostics;  
  3. using System.Threading;  
  4. using mshtml;  
  5. using SHDocVw;  
  6. namespace IEDemo  
  7. {  
  8.     class Program  
  9.     {  
  10.         static AutoResetEvent documentComplete = new AutoResetEvent(false);  
  11.         staticvoid Main(string[] args)  
  12.         {  
  13.             Console.WriteLine(DateTime.Now.ToString() + " 開始"
    );  
  14.             InternetExplorer ie = GetInternetExplorer();  
  15.             if (ie != null)  
  16.             {  
  17.                 Run(ie);  
  18.             }  
  19.             Console.WriteLine(DateTime.Now.ToString() + " 結束");  
  20.         }  
  21.         privatestatic InternetExplorer GetInternetExplorer()  
  22.         {  
  23.             InternetExplorer ie = null;  
  24.             Console.WriteLine(DateTime.Now.ToString() + " 載入IE例項");  
  25.             //查詢是否有開啟的IE程序視窗,如果已經包含CSDN登入頁,則得到此程序
  26.             Process[] processes = Process.GetProcesses();  
  27.             Process process = null;  
  28.             foreach (Process p in processes)  
  29.             {  
  30.                 if (string.Compare(p.ProcessName, "iexplore"true) == 0)  
  31.                 {  
  32.                     if (p.MainWindowTitle.IndexOf("CSDN 使用者登入") >= 0) // CSDN 使用者登入 - Windows Internet Explorer
  33.                     {  
  34.                         process = p;  
  35.                         break;  
  36.                     }  
  37.                 }  
  38.             }  
  39.             //如果沒有則啟動IE例項
  40.             if (process == null)  
  41.             {  
  42.                 process = Process.Start("iexplore.exe""about:blank");  
  43.             }  
  44.             if (process == null)  
  45.             {  
  46.                 Console.WriteLine(DateTime.Now.ToString() + " 無法啟動IE");  
  47.                 returnnull;  
  48.             }  
  49.             Thread.Sleep(3000);  
  50.             try
  51.             {  
  52.                 Console.WriteLine(DateTime.Now.ToString() + " Process Handle: " + process.MainWindowHandle.ToString());  
  53.             }  
  54.             catch (Exception ex)  
  55.             {  
  56.                 Console.WriteLine(ex.Message);  
  57.                 returnnull;  
  58.             }  
  59.             ShellWindows browsers = new ShellWindows();  
  60.             Console.WriteLine(DateTime.Now.ToString() + " 活動瀏覽器數量: " + browsers.Count);  
  61.             if (browsers.Count == 0)  
  62.             {  
  63.                 Console.WriteLine(DateTime.Now.ToString() + " 未找到IE");  
  64.             }  
  65.             //如果找到匹配的IE程序,則把當前InternetExplorer物件連線到正在執行的IE程式
  66.             Console.WriteLine(DateTime.Now.ToString() + " 附加到IE");  
  67.             int i = 0;  
  68.             while (i < browsers.Count && ie == null)  
  69.             {  
  70.                 InternetExplorer e = browsers.Item(i) as InternetExplorer;  
  71.                 if (e != null)  
  72.                 {  
  73.                     if (e.HWND == (int)process.MainWindowHandle)  
  74.                     {  
  75.                         ie = e;  
  76.                         break;  
  77.                     }  
  78.                 }  
  79.                 ++i;  
  80.             }  
  81.             if (ie == null)  
  82.             {  
  83.                 Console.WriteLine(DateTime.Now.ToString() + " 附加到IE失敗");  
  84.             }  
  85.             return ie;  
  86.         }  
  87.         privatestaticvoid Run(InternetExplorer ie)  
  88.         {  
  89.             ie.DocumentComplete += new DWebBrowserEvents2_DocumentCompleteEventHandler(ie_DocumentComplete);  
  90.             try
  91.             {  
  92.                 HTMLDocument document = null;  
  93.                 object o = newobject();  
  94.                 //導航到CSDN登入頁
  95.                 ie.Navigate("http://passport.csdn.net/UserLogin.aspx?from=http://community.csdn.net/"ref o, ref o, ref o, ref o);  
  96.                 documentComplete.WaitOne(1000, true);  
  97.                 document = ie.Document as HTMLDocument;  
  98.                 if (document != null)  
  99.                 {  
  100.                     //以下操縱IE Shell
  101.                     HTMLInputButtonElement name = document.getElementById("ctl00_CPH_Content_tb_LoginNameOrLoginEmail"as HTMLInputButtonElement;  
  102.                     if (name != null)  
  103.                     {  
  104.                         //csdn使用者名稱
  105.                         name.value = "yourcsdnusername";  
  106.                     }  
  107.                     HTMLInputButtonElement password = document.getElementById("ctl00_CPH_Content_tb_Password"as HTMLInputButtonElement;  
  108.                     if (password != null)  
  109.                     {  
  110.                         //csdn密碼
  111.                         password.value = "yourcsdnpassword";  
  112.                     }  
  113.                     HTMLInputButtonElement imagecode = document.getElementById("ctl00_CPH_Content_tb_ExPwd"as HTMLInputButtonElement;  
  114.                     if (imagecode != null)  
  115.                     {  
  116.                         Console.Write("輸入驗證碼:");  
  117.                         //控制檯視窗輸入驗證碼
  118.                         string code = Console.ReadLine();  
  119.                         imagecode.value = code;  
  120.                     }  
  121.                     HTMLInputButtonElement submit = document.getElementById("ctl00_CPH_Content_Image_Login"as HTMLInputButtonElement;  
  122.                     if (submit != null)  
  123.                     {  
  124.                         submit.click();  
  125.                         documentComplete.WaitOne(1000, true);  
  126.                     }  
  127.                 }  
  128.             }  
  129.             catch (Exception ex)  
  130.             {  
  131.                 Console.WriteLine(ex.Message);  
  132.             }  
  133.         //    ie.Quit();
  134.         }  
  135.         privatestaticvoid ie_DocumentComplete(object pDisp, refobject URL)  
  136.         {  
  137.             documentComplete.Set();  
  138.         }  
  139.     }  

相關推薦

操縱IE瀏覽器模擬使用者登入CSDN

大多數C#程式設計師對於使用HttpRequest、HttpResponse、WebClient這樣的類向Web伺服器發出請求並取得響應結果並不陌生。 但有時我們想模擬使用者操縱瀏覽器的場景(尤其是在自動化測試時),那麼我們可以選擇使用mshtml.dll和shdocv

瀏覽器無法登入csdncsdn無法儲存、釋出博文的一個奇怪的解決方法(ubuntu16.04下網頁)

問題描述: ubuntu16.04系統 firefox瀏覽器無法登入csdn,每次登入失敗就會顯示“建立安全連線失敗,連線到passport.csdn.net時發生錯誤” google瀏覽器可以登入csdn,但是無法儲存和釋出博文,request請求中headers出現

嘗試用requests模擬登入CSDN

今天初學用requests庫登入CSDN,在這裡記錄一下心得,有問題請大家多指導。 ,用F12開發者工具抓包,看看提交了哪些資料,記得把Preserve log勾選上,不然在結果裡不顯示了。 現在得到了登入地址和提交表單,注意表單裡紅箭頭指向的兩項,lt和executi

採用cookie模擬登入csdn網站

有些網站需要填寫賬戶和密碼,如果直接爬去網頁資訊,自然是進不去了,這裡採用cookiejar工具來實現這個目的 import urllib.request, urllib.parse, urllib.

request post 模擬登入 csdn 獲取儲存cookie

# -*- coding=utf-8 -*- import requests from lxml import etree headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) Apple

GridView,IE瀏覽器去掉行右邊豎的黑線

alt pan blog nes lis nat img clas src GridView在IE瀏覽器下有黑線。 加上如下屬性 <asp:GridView ID="GridView1" runat="server" CssClass="table-list

IE瀏覽器從頁面向後臺Controller傳中文值出現亂碼問題

亂碼問題 editable com combo url 面向 val textfield bsp 地址前面添加encodeURI() 1、 1 var url = encodeURI(‘xxxAction.action?para=‘+中文); 2 3 $(‘#

js判斷是否為ie瀏覽器

win active spa nbsp 兼容性問題 else -s ont 非ie   之前在開發時遇到瀏覽器的兼容性問題,涉及到對ie瀏覽器的判斷。現在此做個筆記。   這裏我以函數的形式來判斷,在用的時候直接調用即可。   var isIE = !!window.A

chrome-Firefox-IE瀏覽器兼容總結

enter ren ont 標準 距離 tro tac oev turn 作為一名WEB前端程序員,相信每個人對瀏覽器的兼容都"情有獨鐘",下面就一些常用的瀏覽器的兼容列舉一二。 一、塊級元素(block)一般不轉化為inline-block,其實是因為瀏覽器的兼容問題,I

卸載完百度影音以後天氣助手還在,而且總是自己主動打開ie瀏覽器,解決方式

通過 -m == 第三方 post uninstall ria pan xms 今天暴風影音不好用了。我就安裝了百度影音,還有意外發現。相同的視頻,用百度影音看不清楚,然後我就直接卸載了。結果卸掉以天氣小助手還是在,而且總彈白色小框框,各種廣告。最

IE瀏覽器兼容

其他 request對象 shift charset option gamma 同步 element document IE6下面元素的寬高小於16PX時 會默認以16PX顯示(最小寬高) 解決辦法:設置元素overflow:hidden; 當文字全是

使用google瀏覽器模擬手機終端的方法

sym 開啟 html .exe nexus agen style agent 輸入 谷歌Chrome瀏覽器,可以很方便地用來當移動終端模擬器。在Windows的【開始】-->【運行】中輸入以下命令,啟動谷歌瀏覽器,即可模擬相應手機的瀏覽器去訪問3G手機網頁,前提:

兼容ie瀏覽器的方法

但是 hat textarea tar 文檔 wid min-width contain js文件 讓IE6 IE7 IE8 IE9 IE10 IE11支持Bootstrap的解決方法 最近做一個Web網站,之前一直覺得bootstrap非常好,這次使用了bootstr

duilib 的IE瀏覽器控件去邊框和去滾動欄的代碼

del bin als theme type navi pla 觸發 man 轉載請說明原出處,謝謝~~ 近些天在duilib群裏常常有朋友問起,怎麽讓duilib的IE控件能夠去邊框。去滾動欄的問題,或者是怎樣去控件IE控件的行為。為了避

ie瀏覽器中的不同

blog ges 瀏覽器兼容 偶數 org .cn ie6 建議 字號 ie瀏覽器中不支持奇數的單位他自己會取整 IE6會自動把奇數字號+1 ==》 建議使用偶數 瀏覽器兼容詳解 http://w3help.org/zh-cn/causes/ ie瀏覽器中的不同

bootshrap會改變IE瀏覽器滾動條樣式

device 自動隱藏 發現 客戶 ice 現在 出現問題 觀察 css 在某個小網站的開發中客戶一直抱怨在IE11中網頁右邊滾動條不一樣後來發現在IE11中,有2個頁面滾動條會自動隱藏,一開始以為是瀏覽器默認行為,改了overflow:scroll後也沒有用。仔細觀察後發

判斷IE瀏覽器版本

dex agent int app ide ros useragent function soft function IEVer(){ var rv = -1; if (navigator.appName == ‘Microsoft Internet Expl

js判斷是否IE瀏覽器

alert 瀏覽器 str sta spa tar bject art window //ie? if (!!window.ActiveXObject || "ActiveXObject" in window){ //是

4.3 瀏覽器模擬--headers屬性

app 末尾 都是 article import chrom 不支持 kit 如何 ‘‘‘4.3 瀏覽器模擬--headers屬性‘‘‘‘‘‘#有的時候,我們無法爬取一些網頁,會出現403錯誤,因為這些網頁為了防止別人惡意# 采集其信息所以進行了一些反爬蟲的設置。#那麽,我

Python模擬登錄csdn代碼

code http pro submit sub com headers soup eve #encoding:utf-8 import urllib import urllib2 import cookielib from bs4 import BeautifulSo