Introduction
This article shows code to open a website in a new Internet Explorer window and find the controls inside the website and fire the events in that site.
Using the Code
Recently, I came across a requirement for opening a website in Internet Explorer and firing the events in that site (e.g., open GMail and fill the user ID and password and fire the sign-in button event) using C#. It was quite interesting.... The code I used is shown below:
InternetExplorer gmailurl = new InternetExplorer();
object mVal = System.Reflection.Missing.Value;
gmailurl.Navigate("http://www.gmail.com", ref mVal, ref mVal, ref mVal, ref mVal);
HTMLDocument myDoc = new HTMLDocumentClass();
System.Threading.Thread.Sleep(500);
myDoc = (HTMLDocument)gmailurl.Document;
HTMLInputElement userID = (HTMLInputElement)myDoc.all.item("username", 0);
userID.value = "youruserid";
HTMLInputElement pwd = (HTMLInputElement)myDoc.all.item("pwd", 0);
pwd.value = "yourpassword";
HTMLInputElement btnsubmit = (HTMLInputElement)myDoc.all.item("signIn", 0);
btnsubmit.click();
gmailurl.Visible = true;
In the above code, the class InternetExplorer
is from SHDocVw.dll, which you can download from: http://www.dll-files.com/dllindex/dll-files.shtml?shdocvw.
Another reference I have used is for the HTMLDocument
class is MSHTML, which you can get from a COM reference (right click the project in Solution Explorer and click on Add Reference, go to the COM tab, and add Microsoft HTML Object Library).
In the above code:
HTMLInputElement userID = (HTMLInputElement)myDoc.all.item("username", 0);
is used to find the textbox for the username, where the "username" is nothing but the name of the input textbox control which is used in the GMail site. You can find this by going to the View Source of the GMail site; similarly for the password and the sign-in button.
The code which above will open Internet Explorer on the server side and not on the client side, so I went for a client-script which will do the same job as above. Here is the VBScript code I used:
Function getgmail()
Dim count
Dim ie
Set ie = CreateObject("InternetExplorer.Application")
ie.Navigate "http://www.gmail.com"
Do While ie.Busy Or (ie.READYSTATE <> 4)
count = count+1
Loop
ie.Visible=True
ie.document.all.username.value = "youruserID"
ie.document.all.pwd.value = "yourpassword"
ie.document.all.signIn.click
END Function
Points of Interest
I have tried the above solution in many ways; I tried to use ProcessStartInfo
, IHTMLDocument
, and then the HttpWebRequest
class, which didn't satisfied my requirements. Another point which I have noted is in some sites, for some controls, there will not be any name (e.g., username, pwd, signIn ...) property, so I had to struggle a little to find controls, and I found that using the unique IDs for each control used in that site helps.
Hope this helps someone...... Happy Coding! :-)