Form Filling

From iMacros
Revision as of 10:57, 26 April 2007 by Hm (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Submiting Multiple Datasets to Web Sites

(Related example macros: Demo-Datasource, Demo-Loop-CSV-2Web) (Related example script: Datasource-2-web.vbs, File-2-web.vbs, File-2-web-Method2.vbs, Database-2-web.vbs)

Are you tired of filling out the same form over and over again? Then let iMacros help you. Simply put all data to be input into a very straightforward and easily understandable text file and iMacros can read the data from there and submit it to the web site - completely automatic, without your interaction!

The data source can be in either of two different formats: a text file with a list of variables and their values of the form key=value or as a comma separated text file (CSV format). A text file in CSV format can be generated and edited by Microsoft Excel and many other applications.

As a rule of thumb the "list of variables" format is recommend if you have many different variables but only one or a few value(s) for each variable (for example, your detailed address data that you use to fill out online forms). The CSV format is most appropriate for use with a few variables with many different values (for example, a long list of CD's that you want to submit to an auction web site).

More advance users might connect directly to databases to retrieve the data.

Input from Comma Separated Data (CSV) File

(Related example macros: Demo-ReadCSV) (Related example script: CSV-2-web.vbs, Database-2-web.vbs)

iMacros allows you to specify a text file with comma separated values to be used as input. Imagine, for example, that you want to submit a list of CD's to an online auction. Here is the list of the CD's in the comma separated format:

"ARTIST" , "ALBUM TITLE" , "PRICE" 
"Beatles", "Abbey Road", "13.49" 
"Beatles", "The Beatles 1,2,3" , "25.49" 
"Mozart" , "Symphonies No.40 & 41", "9.98" 
"Mozart", "Requiem", "7.50" 

Note: Quotation marks are optional in most cases. They are only required if the value itself contains a comma.

We now need to tell the iMacros macro where the data input file can be found. For that we use the built-in variable !DATASOURCE

SET !DATASOURCE OnlineAuction.csv 

If you do not use any path information (like C:\myPath\) in the !DATASOURCE value the file is assumed to lie in the standard datasources directory, which can be specified in the Paths tab of the Options dialog. The default directory is in the datasources\ directory of your iMacros installation (e.g. C:\Program Files\iMacros\datasources\).

We then need to tell iMacros how many columns the CSV file has in each line. We do that by using the !DATASOURCE_COLUMNS variable:

SET !DATASOURCE_COLUMNS 3 

This number must match the exact number of columns in the input file, even if you do not use some columns.

Since we want to insert all datasets into the form we need to loop over the macro, each time inserting the next CD. Therefore, we need to tell iMacros in which line of the datasource we currently are. We do this using the built-in variable !DATASOURCE_LINE. By cunningly using the built-in variable !LOOP we let iMacros take care of the counting:

 SET !DATASOURCE_LINE {{!LOOP}} 

Now we can have the macro fill out the online form with the values from the current CD dataset. We use the built-in variables !COLn, where n represents the number of the columns to put into the form element.

 TAG TYPE=INPUT:TEXT FORM=Listing ATTR=NAME:Name CONTENT={{!COL1}}   
 TAG TYPE=INPUT:TEXT FORM=Listing ATTR=NAME:Album CONTENT={{!COL2}}   
 TAG TYPE=INPUT:TEXT FORM=Listing ATTR=NAME:Price CONTENT={{!COL3}} 


During the execution of the macro the constants in parentheses {{..}} are replaced by the value specified in the data sources.

Input from List of Variables File

(Related example macros: Demo-Datasource) (Related example script: Datasource-2-web.vbs)

You can also use data from a list of variables input file. The information in this format is saved in the form of key-value pairs, like

key1=value1 
key2=value2 

To use input in that format create a plain text file that contains the information you want to submit. The first line in this input file must be

[iOpus] 

In this example we create a file that contains the information on ordering "lunch". lunch.txt could look like this:

[iOpus]  
name=Mr.<SP>Tester  
main=2 
drink=2  
smallsizedrink=NO  
myremarks=Deliver<SP>to<SP>home<SP>address:
1629<SP>4th<SP>Avenue
Thanks!
Tom

We now need to tell the iMacros macro where the data input file can be found. For that we use the built-in variable !DATASOURCE

SET !DATASOURCE lunch.txt 

If you do not use any path information (like C:\myPath\) in the !DATASOURCE value the file is assumed to lie in the standard datasources directory, which can be specified in the Paths tab of the Options dialog. The default directory is in the datasources\ directory of your iMacros installation (e.g. C:\Program Files\iMacros\datasources\).

After we have specified the location of the input data it is ready to use! iMacros creates variables called after the key part of the key-value pairs. The value of this variable is the value of the key-value pair. You can now use these variable to fill the form:

TAG TYPE=INPUT:TEXT FORM=NAME:TestForm2 ATTR=NAME:Name CONTENT={{name}}   
TAG TYPE=SELECT FORM=NAME:TestForm2 ATTR=NAME:main CONTENT={{main}}  
TAG TYPE=SELECT FORM=NAME:TestForm2 ATTR=NAME:drink CONTENT={{drink}}  
TAG TYPE=INPUT:CHECKBOX FORM=NAME:TestForm2 ATTR=NAME:C8&&VALUE:ON CONTENT={{smallsizedrink}}  
TAG TYPE=TEXTAREA FORM=NAME:TestForm2 ATTR=NAME:Remarks CONTENT={{myremarks}}     

During the execution of the macro the constants in parentheses {{..}} are replaced by the value specified in the data sources.

Multiple Sets of Key-Value Pairs If you want iMacros to read different sets of key-value pairs for each loop add a number at the end of the key and add !LOOP to the end of the name inside the macro. The datasource input.txt could then look like this:

[iOpus]  
name1=Tom<SP>Tester  
name2=Ann<SP>Smith  
name3=Nicole<SP>Frank  
main1=2  
main2=1  
main3=3  

The complete macro would then look like this:

SET !DATASOURCE input.txt 
TAG TYPE=INPUT:TEXT FORM=NAME:TestForm2 ATTR=NAME:Name CONTENT={{name!LOOP}}   
TAG TYPE=SELECT FORM=NAME:TestForm2 ATTR=NAME:main CONTENT={{main!LOOP}} 

Input from Database

(Related example macros: Wsh-Submit-2-Web) (Related example script: File-2-web-Method2.vbs, Database-2-web.vbs)

This example only works with the Scripting Edition.

iMacros can read data directly from any Windows database using the Scripting Interface and a few lines of code.

This example code in Visual Basic Script connects to an Microsoft Access database:

' open database 
set rs = CreateObject("ADODB.Connection") 
rs.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" _ 
& mypath & "IIM-TEST-SUBMIT.MDB") 

' use SQL to select information 
sql = "select * from table1" 
set rs = rs.Execute(sql) 

' start iMacros 
set iim1= CreateObject ("InternetMacros.iim") 
iret = iim1.iimInit 
iret = iim1.iimDisplay("Submitting Data from MS ACCESS") 

' loop through result dataset 
do until rs.eof 
   'Set the variable 
   iret = iim1.iimSet("-var_FNAME", rs.fields(0)) 
   iret = iim1.iimSet("-var_LNAME", rs.fields(1)) 
   iret = iim1.iimSet("-var_ADDRESS", rs.fields(2)) 
   iret = iim1.iimSet("-var_CITY", rs.fields(3)) 
   iret = iim1.iimSet("-var_ZIP", rs.fields(4)) 
   iret = iim1.iimSet("-var_STATE-ID", rs.fields(5)) 
   iret = iim1.iimSet("-var_COUNTRY-ID", rs.fields(6)) 
   iret = iim1.iimSet("-var_EMAIL", rs.fields(7)) 
   'Run the macro 
   'Note: This is the SAME macro, as in the FILE-2-WEB-METHOD2.VBS example script!!! 
   iret = iim1.iimPlay("wsh-submit-2-web") 
   If iret < 0 Then 
      MsgBox iim1.iimGetLastError() 
   End If 
  rs.movenext 
loop 

iret = iim1.iimDisplay("Done!") 
iret = iim1.iimExit 
WScript.Quit(0)