[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>Ημερομηνία: </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>Περιοχή: </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