如何由程式開啟 IE 並進行會員登入
如何由程式開啟 IE 並填入 [ 帳號 ] / [ 密碼 ] 來進行會員 [ 登入 ]
Yahoo! 奇摩會員登入Sample
<< VB.Net 寫法 >>
' 宣告並建立IE 執行個體物件
Dim ie As Object = CreateObject("InternetExplorer.Application")
' Yahoo!奇摩會員登入網址
Dim strURL As String = "http://tw.login.yahoo.com/cgi-bin/login.cgi?srv=www&from=http://tw.yahoo.com"
With ie
.Visible = True ' 顯示IE
.Navigate(strURL) ' 瀏覽網址
' 等待網頁載入完成
Do While .Busy
Application.DoEvents()
Loop
.Document.All("login").Value = "這裡打帳號" ' 帳號
.Document.All("passwd").Value = "這裡打密碼" ' 密碼
.Document.All("submit").Click() ' 登入
End With
ie = Nothing ' 釋放IE 物件
================================================================
<< C# 寫法 >>
using System.Runtime.InteropServices;
using System.Reflection;
using System.Threading;
// Yahoo!奇摩會員登入網址
string strURL = "http://tw.login.yahoo.com/cgi-bin/login.cgi?srv=www&from=http://tw.yahoo.com";
// Type.GetTypeFromProgID 方法: 取得與指定的程式識別項(ProgID) 關聯的型別;
// InternetExplorer.Application 為M$ IE 的ProgID
Type tp = Type.GetTypeFromProgID("InternetExplorer.Application");
// Activator 成員: 建立物件型別的方法,或者取得對現有遠端物件的參考。
// Activator.CreateInstance 方法(Type) 建構函式: 建立指定型別的執行個體。
object ie = Activator.CreateInstance(tp);
// Type.InvokeMember 方法(String, BindingFlags, Binder, Object, Object[])
// 呼叫IE 物件的Navigate 方法瀏覽網頁
tp.InvokeMember("Navigate", BindingFlags.InvokeMethod, null, ie, new object[] { strURL });
// 呼叫IE 物件的Visible 屬性顯示出IE
tp.InvokeMember("Visible", BindingFlags.SetProperty, null, ie, new object[] { true });
int intWait = 0;
bool blnBusy = false;
int intState = 0;
// 等待IE 瀏覽狀態至Web Page 頁面載入完成
while (true)
{
blnBusy = (bool)tp.InvokeMember("Busy", BindingFlags.GetProperty, null, ie, null);
intState = (int)tp.InvokeMember("ReadyState", BindingFlags.GetProperty, null, ie, null);
if (!blnBusy && (intState == 4)) break;
if (intWait >= 10)
{
return;
}
Thread.Sleep(1000);
intWait++;
}
// 取得IE 物件文件物件模型中的Document 物件
object doc = tp.InvokeMember("document", BindingFlags.GetProperty, null, ie, null);
// 取得IE Doc 物件中All 屬性集合物件(Collection)
object objAll = tp.InvokeMember("all", BindingFlags.GetProperty, null, doc, null);
// 根據Control 名稱取得帳號, 密碼及登入對應之物件
object objLogin = tp.InvokeMember("login", BindingFlags.GetProperty, null, objAll, null);
object objPswd = tp.InvokeMember("passwd", BindingFlags.GetProperty, null, objAll, null);
object objSubmit = tp.InvokeMember("submit", BindingFlags.GetProperty, null, objAll, null);
// 設定帳號, 密碼後登入
tp.InvokeMember("value", BindingFlags.SetProperty, null, objLogin, new object[] { "這裡打帳號" });
tp.InvokeMember("value", BindingFlags.SetProperty, null, objPswd, new object[] { "這裡打密碼" });
tp.InvokeMember("click", BindingFlags.InvokeMethod, null, objSubmit, null);
// Marshal.ReleaseComObject 方法釋放COM 物件
Marshal.ReleaseComObject(ie);
ie = null;