[dba-VB] internet screen manipulation

Michael Maddison michael at ddisolutions.com.au
Wed Jun 16 18:34:04 CDT 2010


Hi John,

If I read your request correctly you want to send/receive data to a web
page/s from a program.
If so I did this recently in a proof of concept and go it working.
My target site was a online betting site.
I used C# and a program called Fiddler (free) to read the actual POSTS
and RESPONSEs and built my own
in code to emulate the original including logging in and retrieving data
like balances and placing bets.

Heres my login code based on samples from google, I'm sure it could be
written better but it did work...

Cheers

Michael

       private bool LoginToTAB ( )
        {

            string START_URL =
"http://www.tab.com.au/ExpressBet/Standard/Default.aspx?State=2";
            string LOGIN_URL =
"http://www.tab.com.au/ExpressBet/LoginFrame.aspx?State=2&ExpressBetMode
=Standard";
            string SECRET_PAGE_URL =
"https://www.tab.com.au/Login/LoginUser.aspx?State=2&ReturnURL=http://ww
w.tab.com.au/ExpressBet/LoginFrame.aspx?State=2&ExpressBetMode=Standard"
;
            
            #region -- GET Start Page --

            HttpWebRequest startPageWebRequest = (HttpWebRequest)
WebRequest.Create ( START_URL );
            startPageWebRequest.CookieContainer = new CookieContainer (
);

            HttpWebResponse startPageWebResponse = (HttpWebResponse)
startPageWebRequest.GetResponse ( );

            //Get cookies for later use
            startPageWebResponse.Cookies =
startPageWebRequest.CookieContainer.GetCookies (
startPageWebRequest.RequestUri );
            _cc = startPageWebRequest.CookieContainer;

            #endregion

            #region -- GET Login Page --

            startPageWebRequest = (HttpWebRequest) WebRequest.Create (
LOGIN_URL );
            startPageWebRequest.CookieContainer = new CookieContainer (
);

            startPageWebResponse = (HttpWebResponse)
startPageWebRequest.GetResponse ( );

            //loginWebResponse.Cookies =
loginWebRequest.CookieContainer.GetCookies ( loginWebRequest.RequestUri
);
            //foreach ( Cookie cky in loginWebResponse.Cookies )
            //{
            //    if ( cky.Name == "ASP.NET_SessionId" )
            //    {
            //        cook = cky;
            //        break;
            //    }
            //}

            Stream strm = startPageWebResponse.GetResponseStream ( );
            StreamReader sr = new StreamReader ( strm );

            string s = string.Empty;

            while ( sr.Peek ( ) > -1 )
            {
                s += sr.ReadLine ( );
            }
            sr.Close ( );
            startPageWebResponse.Close ( );

            #endregion

            //Console.WriteLine ( s );

            _viewState = ExtractViewState ( s );
            _eventValidation = ExtractEventValidation ( s );
            _prevPage = ExtractPreviousPage ( s );
            //_sessionID = cook.Value;  // ExtractSessionID ( s );

            _postData =
            String.Format
                (
"__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE={0}&DisplayExpressTopNav1$T
extboxLogin={1}&DisplayExpressTopNav1$TextboxPassword={2}" +
 
"&DisplayExpressTopNav1$ShowBetSlipOnLogin={3}&__PREVIOUSPAGE={4}&__EVEN
TVALIDATION={5}",
            _viewState, Username, Password, "false", _prevPage,
_eventValidation );

            #region -- POST Login --

            HttpWebRequest loginWebRequest = (HttpWebRequest)
WebRequest.Create ( SECRET_PAGE_URL );

            loginWebRequest.CookieContainer = new CookieContainer ( );

            loginWebRequest.Accept =
"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; //
"*/*";
            loginWebRequest.Referer =
"http://www.tab.com.au/ExpressBet/LoginFrame.aspx?State=2&ExpressBetMode
=Standard";
            loginWebRequest.ContentLength = _postData.Length;
            loginWebRequest.ContentType =
"application/x-www-form-urlencoded";
            loginWebRequest.Method = "POST";
            loginWebRequest.KeepAlive = true;
            loginWebRequest.UserAgent = "Mozilla/5.0 (Windows; U;
Windows NT 6.0; en-GB; rv:1.9.1.4) Gecko/20091016 Firefox/3.5.4 (.NET
CLR 3.5.30729)";

            foreach ( Cookie cky in startPageWebResponse.Cookies )
            {
                loginWebRequest.CookieContainer.Add ( cky );
                //Console.WriteLine ( "hwr2 - " + cky.Name + " = " +
cky.Value );
            }

            string strResponse = string.Empty;

            // Write the request
            using ( StreamWriter stOut = new StreamWriter (
loginWebRequest.GetRequestStream ( ), System.Text.Encoding.ASCII ) )
            {
                stOut.Write ( _postData );
            }

            // Do the request to get the response
            using ( StreamReader stIn = new StreamReader (
loginWebRequest.GetResponse ( ).GetResponseStream ( ) ) )
            {
                strResponse = stIn.ReadToEnd ( );
            }

            HttpWebResponse loginWebResponse = (HttpWebResponse)
loginWebRequest.GetResponse ( );

            loginWebResponse.Cookies =
loginWebRequest.CookieContainer.GetCookies (
startPageWebRequest.RequestUri );
            //foreach ( Cookie cky in loginWebResponse.Cookies )
            //{
            //    //cook = cky;
            //    Console.WriteLine ( "Login - " + cky.Name + " = " +
cky.Value );
            //}

            #endregion

            _cc = loginWebRequest.CookieContainer;

            return strResponse.Contains ( Username );

        }




I have a client that has to do data entry into an internet screen.  I am
researching whether a 
program can manipulate an internet form, poke values into specific
controls, click buttons etc.

I have looked at the source for one specific screen and it appears to be
all java.  For example, top 
of the screen

<html>
	<head>
		<title>Professional Claim</title>
		<link href='/ePROM/CSS/styles.css' rel='stylesheet'
type='text/css'>
<script src='/ePROM/ScriptLibrary/utils.js'></script>
<script src='/ePROM/ScriptLibrary/soap.js'></script>
<script src='/ePROM/ScriptLibrary/gui.js'></script>
<script src='/ePROM/ScriptLibrary/xsd.js'></script>
<script src='/ePROM/ScriptLibrary/xbind.js'></script>

<script src='/ePROM/ScriptLibrary/validation.js'></script>
<script src='/ePROM/ScriptLibrary/calendar.js'></script>
<script src='/ePROM/ScriptLibrary/techSupport.js'></script>

<script language=javascript>
	var g_fFieldsChanged = 0;
	var hrs = 0;						// DF
5462
	var mins = 90;	// DF 5462
	var secs = 0;						// DF
5462
</script>

<SCRIPT FOR=window EVENT=onload>
	// Heir Menus
	if (typeof(HM_f_StartIt) != "undefined")
		HM_f_StartIt();

	// Call any user defined "onload" routines.
	var inx;

########################################################################
###########

So...

do developers poke data into screens, and read values back from screens,
click buttons, select menu 
items etc?

I did this kind of thing back in the late 90s but so much has changed.
I am just beginning to 
investigate whether this is possible and where to go to learn how.

Any help appreciated

-- 
John W. Colby
www.ColbyConsulting.com
_______________________________________________
dba-VB mailing list
dba-VB at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/dba-vb
http://www.databaseadvisors.com


No virus found in this incoming message.
Checked by AVG - www.avg.com 
Version: 9.0.829 / Virus Database: 271.1.1/2928 - Release Date: 06/17/10
04:35:00




More information about the dba-VB mailing list