操縱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)的引用。
詳細內容請參考程式碼註釋
- using System;
- using System.Diagnostics;
- using System.Threading;
- using mshtml;
- using SHDocVw;
- namespace IEDemo
- {
- class Program
- {
- static AutoResetEvent documentComplete = new AutoResetEvent(false);
- staticvoid Main(string[] args)
- {
-
Console.WriteLine(DateTime.Now.ToString() + " 開始"
- InternetExplorer ie = GetInternetExplorer();
- if (ie != null)
- {
- Run(ie);
- }
- Console.WriteLine(DateTime.Now.ToString() + " 結束");
- }
- privatestatic InternetExplorer GetInternetExplorer()
-
{
- InternetExplorer ie = null;
- Console.WriteLine(DateTime.Now.ToString() + " 載入IE例項");
- //查詢是否有開啟的IE程序視窗,如果已經包含CSDN登入頁,則得到此程序
- Process[] processes = Process.GetProcesses();
- Process process = null;
- foreach (Process p in processes)
- {
- if (string.Compare(p.ProcessName, "iexplore", true) == 0)
- {
- if (p.MainWindowTitle.IndexOf("CSDN 使用者登入") >= 0) // CSDN 使用者登入 - Windows Internet Explorer
- {
- process = p;
- break;
- }
- }
- }
- //如果沒有則啟動IE例項
- if (process == null)
- {
- process = Process.Start("iexplore.exe", "about:blank");
- }
- if (process == null)
- {
- Console.WriteLine(DateTime.Now.ToString() + " 無法啟動IE");
- returnnull;
- }
- Thread.Sleep(3000);
- try
- {
- Console.WriteLine(DateTime.Now.ToString() + " Process Handle: " + process.MainWindowHandle.ToString());
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.Message);
- returnnull;
- }
- ShellWindows browsers = new ShellWindows();
- Console.WriteLine(DateTime.Now.ToString() + " 活動瀏覽器數量: " + browsers.Count);
- if (browsers.Count == 0)
- {
- Console.WriteLine(DateTime.Now.ToString() + " 未找到IE");
- }
- //如果找到匹配的IE程序,則把當前InternetExplorer物件連線到正在執行的IE程式
- Console.WriteLine(DateTime.Now.ToString() + " 附加到IE");
- int i = 0;
- while (i < browsers.Count && ie == null)
- {
- InternetExplorer e = browsers.Item(i) as InternetExplorer;
- if (e != null)
- {
- if (e.HWND == (int)process.MainWindowHandle)
- {
- ie = e;
- break;
- }
- }
- ++i;
- }
- if (ie == null)
- {
- Console.WriteLine(DateTime.Now.ToString() + " 附加到IE失敗");
- }
- return ie;
- }
- privatestaticvoid Run(InternetExplorer ie)
- {
- ie.DocumentComplete += new DWebBrowserEvents2_DocumentCompleteEventHandler(ie_DocumentComplete);
- try
- {
- HTMLDocument document = null;
- object o = newobject();
- //導航到CSDN登入頁
- ie.Navigate("http://passport.csdn.net/UserLogin.aspx?from=http://community.csdn.net/", ref o, ref o, ref o, ref o);
- documentComplete.WaitOne(1000, true);
- document = ie.Document as HTMLDocument;
- if (document != null)
- {
- //以下操縱IE Shell
- HTMLInputButtonElement name = document.getElementById("ctl00_CPH_Content_tb_LoginNameOrLoginEmail") as HTMLInputButtonElement;
- if (name != null)
- {
- //csdn使用者名稱
- name.value = "yourcsdnusername";
- }
- HTMLInputButtonElement password = document.getElementById("ctl00_CPH_Content_tb_Password") as HTMLInputButtonElement;
- if (password != null)
- {
- //csdn密碼
- password.value = "yourcsdnpassword";
- }
- HTMLInputButtonElement imagecode = document.getElementById("ctl00_CPH_Content_tb_ExPwd") as HTMLInputButtonElement;
- if (imagecode != null)
- {
- Console.Write("輸入驗證碼:");
- //控制檯視窗輸入驗證碼
- string code = Console.ReadLine();
- imagecode.value = code;
- }
- HTMLInputButtonElement submit = document.getElementById("ctl00_CPH_Content_Image_Login") as HTMLInputButtonElement;
- if (submit != null)
- {
- submit.click();
- documentComplete.WaitOne(1000, true);
- }
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.Message);
- }
- // ie.Quit();
- }
- privatestaticvoid ie_DocumentComplete(object pDisp, refobject URL)
- {
- documentComplete.Set();
- }
- }
- }
相關推薦
操縱IE瀏覽器模擬使用者登入CSDN
大多數C#程式設計師對於使用HttpRequest、HttpResponse、WebClient這樣的類向Web伺服器發出請求並取得響應結果並不陌生。 但有時我們想模擬使用者操縱瀏覽器的場景(尤其是在自動化測試時),那麼我們可以選擇使用mshtml.dll和shdocv
瀏覽器無法登入csdn或csdn無法儲存、釋出博文的一個奇怪的解決方法(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