@@ -21,7 +21,9 @@ def get_form_details(form):
2121    including action, method and list of form controls (inputs, etc)""" 
2222    details  =  {}
2323    # get the form action (requested URL) 
24-     action  =  form .attrs .get ("action" ).lower ()
24+     action  =  form .attrs .get ("action" )
25+     if  action :
26+         action  =  action .lower ()
2527    # get the form method (POST, GET, DELETE, etc) 
2628    # if not specified, GET is the default in HTML 
2729    method  =  form .attrs .get ("method" , "get" ).lower ()
@@ -36,6 +38,38 @@ def get_form_details(form):
3638        input_value  = input_tag .attrs .get ("value" , "" )
3739        # add everything to that list 
3840        inputs .append ({"type" : input_type , "name" : input_name , "value" : input_value })
41+     for  select  in  form .find_all ("select" ):
42+         # get the name attribute 
43+         select_name  =  select .attrs .get ("name" )
44+         # set the type as select 
45+         select_type  =  "select" 
46+         select_options  =  []
47+         # the default select value 
48+         select_default_value  =  "" 
49+         # iterate over options and get the value of each 
50+         for  select_option  in  select .find_all ("option" ):
51+             # get the option value used to submit the form 
52+             option_value  =  select_option .attrs .get ("value" )
53+             if  option_value :
54+                 select_options .append (option_value )
55+                 if  select_option .attrs .get ("selected" ):
56+                     # if 'selected' attribute is set, set this option as default     
57+                     select_default_value  =  option_value 
58+         if  not  select_default_value  and  select_options :
59+             # if the default is not set, and there are options, take the first option as default 
60+             select_default_value  =  select_options [0 ]
61+         # add the select to the inputs list 
62+         inputs .append ({"type" : select_type , "name" : select_name , "values" : select_options , "value" : select_default_value })
63+     for  textarea  in  form .find_all ("textarea" ):
64+         # get the name attribute 
65+         textarea_name  =  textarea .attrs .get ("name" )
66+         # set the type as textarea 
67+         textarea_type  =  "textarea" 
68+         # get the textarea value 
69+         textarea_value  =  textarea .attrs .get ("value" , "" )
70+         # add the textarea to the inputs list 
71+         inputs .append ({"type" : textarea_type , "name" : textarea_name , "value" : textarea_value })
72+         
3973    # put everything to the resulting dictionary 
4074    details ["action" ] =  action 
4175    details ["method" ] =  method 
0 commit comments