[PyAthens] Πώς να submit μια HTML form με Javascript στοιχεία?

Apostolos Bessas mpessas at gmail.com
Thu Jan 6 10:35:54 CET 2011


2011/1/6 John Giftakis <siropio at gmail.com>:
> Χαιρετε παιδες,
>
> θα ηθελα την συμβουλη σας σε ενα θεματακι που εχω.
> Θελω να κανω αυτοματο SUBMIT φορμας με ενα script σε Python. Οταν η φορμα
> περιεχει μονο στοιχεια HTML το εχω καταφερει και ειναι σχετικα ευκολο και με
> την Library mechanize αλλα και με την απλη urllib2.
>
> Το θεμα μου ειναι πως μπορω να κανω submit την φορμα οταν μεσα εχει
> Javascript.
>
> Παραδειγμα:
>
> Εστω οτι εχεις την εξης φορμα:
>>
>> <form name = "form1" method="POST"
>>    <input type=hidden name="prevcat">
>>    <input type=hidden name="prevcat1">
>>    <b>Ημερομηνία:&nbsp;</b>
>>        <SELECT class="search" name="dateduty" onchange =
>> "javascript:document.comp.prevcat.value=document.comp.dateduty.selectedIndex;">
>>          <Option value="-1">Επιλέξτε ημερομηνία
>>          <Option value="5/1/2011" > 5/1/2011
>>          <Option value="6/1/2011" selected> 6/1/2011
>>        </SELECT>
>>        <strong>Περιοχή:&nbsp;</strong>
>>    <SELECT class="search" NAME="areaid" onchange =
>> "javascript:document.comp.prevcat.value=document.comp.dateduty.selectedIndex;document.comp.prevcat1.value=document.comp.areaid.selectedIndex;">
>>          <Option value="0">Όλες
>>          <Option value="95"> ΑΓ.ΑΝΑΡΓΥΡΟΙ
>>          <Option value="83"> ΑΓ.ΑΡΤΕΜΙΟΣ
>>        </SELECT>
>>       <script language=javascript>
>>       function validateitems(){
>>          var myerr='Πρέπει να επιλέξετε :\n\n';
>>          if (document.comp.dateduty.selectedIndex==0)
>> myerr=myerr+'Ημερομηνία\n';
>>          if (myerr!='Πρέπει να επιλέξετε :\n\n') {
>>             alert(myerr);
>>             return false;
>>          }
>>          return true;
>>
>>       }
>>    </script>
>>
>>         <input type="image"
>> src="/Portals/_default/Skins/fsa/images/search1.gif" onClick="if
>> (!validateitems()) return false;" alt="Αναζήτηση">
>> </form>
>
> Aν η form ηταν απλη HTML τοτε με την mechanize θα μπορουσες να κανεις το
> εξης:(απλα ενα παραδειγμα γνωριζω οτι λειπουν στοιχεια)
>
>> import mechanize
>>
>> br = mechanize.Browser()
>> br.open("http://www.example.com")
>> br.select_form(predicate=lamda(form): 'form1' in form.action)
>> br['dateduty'] = '6/1/2011'
>> br['areaid'] = '83'
>>
>> response = br.submit()
>
> Αλλα η Javascript με εμποδιζει εχοντας τις συναρτησεις της onclick και
> onchange.
>
>
> Ευχαριστω εκ των προταιρων
>
> Γυφτάκης Γιάννης - Πειραιάς - www.digitalfairytales.com
>
>
> _______________________________________________
> PyAthens mailing list
> PyAthens at python.org
> http://mail.python.org/mailman/listinfo/pyathens
>
>

Το πιο απλό είναι να κάνεις κατ' ευθείαν POST request με τη urllib2,
κάτι σαν (δες http://docs.python.org/library/urllib2.html):

import urllib
import urllib2

data = {'prevcat': 'value', 'prevcat1': 'value1', 'dateduty':
'6/1/2011', 'areaid': '83'}
enc_data = urllib.urlencode(data)
urllib2.urlopen(url, enc_data)

Ή δεν καταλαβαίνω ακριβώς το πρόβλημα που σου δημιουργεί η javascript;

Αποστόλης


More information about the PyAthens mailing list