Question

I need to know how to fill an web form using Delphi XE3? I have a web form with user name and password, so how to fill it programmatically?

The page is http://batelco.com/portal see only two inputs user name and pass so how to fill and pass them ?

Was it helpful?

Solution

Using Internet Direct (Indy) HTTP client class, you can submit form values to the server using HTTP POST.

The Indy HTTP client will also receive and store cookies which the server sends with its response, if an instance of the TIdCookieManager class has been assigned to the IdHTTP client component.

HTTP cookies are required by many secure web applications when the client makes further HTTP requests to other secured URL on the server. The Indy HTTP client then will send the cookies with the request (if a TIdCookieManager has been assigned to the IdHTTP client component).

So you could send a login POST request on the login URL, providing needed authentication information, and then send a GET request to the download statistics URL to retrieve its HTML.


Regarding your specific login form, which uses ASP, here is a question about programmatically sending POST requests: HowTo deal with cryptic hidden values for ASP Net (__VIEWSTATE)

OTHER TIPS

This article shows how to get and set properties of named elements.

You should get and set value properties. What ID's would form elements have depends upon your page.

Check if Element with ID has a value


This article while asked "how to read" also describes both how to get values and how to set them. Afterall if you can do A := B (read value), then you probably can also do B := A (set value).

read content in webbrowser input field


Now, that the page URL is given in the question we can click on the right top corner login-form elements in WWW browser with right button, and choose "Inspect element" to see its sources. Or, if browser is not modern and does not have Inspect command on menu, we can use another commend, like View page source and find form in the sources of the whole page. For example one of those elements is

<input name="txtUsername" type="text" maxlength="15"
 id="txtUsername" tabindex="1" class="inpu-field" onfocus="txtfocus();"
 onblur="txtblur();" style="color: gray; background-image: none;">

Thus we know know the ID of 1st element of form, whose "value" attribute we need to get(read) or set(write). Links above show how to do it, given the known ID.

BTW, you given your page wrong, the real page is https://www.e-services.com.bh/Eservices/login_batelco.aspx

What about your original page, it just does not work with MSIE6 that is TWebBrowser in default mode - for compatibility with all the written applications using Microsoft ActiveX component. See http://imgur.com/ad4wbOI

If can use Google Chrome instead of TWebBrowser. Or you can reach the ActiveX interface as one of TWebBrowser properties, and acquire new interface and turn off MSIE6-compatibility http://msdn.microsoft.com/en-us/library/aa752510.aspx

However, "how to make this page render in twebbrowser" is another, new question, not the question you asked here.


Actually, the only reason why i do not vote for closing this question as duplicate, is because none of articles above have "set" or "write" or "fill" in their title, so finding them was a bit harder than trivial.


But if the page is not mutating on load and does not have some one-time protection like CAPTCHA or unique form hash-codes, then you can post all the values with single HTTP request without even loading the form.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top