2012-05-08 10 views
20

का उपयोग कर चयन फ़ॉर्म को मशीनीकृत करें मैं अजगर के साथ मशीनीकरण पर काम कर रहा हूं।आईडी

<form action="/monthly-reports" accept-charset="UTF-8" method="post" id="sblock"> 

यहां फॉर्म का नाम नहीं है। मैं id का उपयोग करके फ़ॉर्म को कैसे पार्स कर सकता हूं?

उत्तर

2

के साथ प्रयास करें:

[f.id for f in br.forms()] 

यह अपने पेज

+0

धन्यवाद, लेकिन यह खाली सूची – sam

3

से सभी प्रपत्र आईडी की एक सूची प्रदान करना चाहिए उपयोग करके देखें: br.select_form(nr=0), जहां एन.आर. प्रपत्र संख्या (आप नाम की जरूरत नहीं है या आईडी)।

+1

writtening है यह कहते हैं कोई रूप मिलान एन.आर. – sam

+0

आप सचमुच की कोशिश की है: br.select_form (एन.आर. = 0)? – marbdq

+0

हां। मैंने कोशिश की है। – sam

20

मुझे यह एक ही समस्या के समाधान के रूप में मिला। br मशीनीकरण वस्तु है:

formcount=0 
for frm in br.forms(): 
    if str(frm.attrs["id"])=="sblock": 
    break 
    formcount=formcount+1 
br.select_form(nr=formcount) 

मुझे यकीन है कि पाश काउंटर विधि से ऊपर अधिक pythonic किया जा सकता है, लेकिन यह विशेषता id="sblock" साथ प्रपत्र का चयन करना चाहिए।

14

python412524 के उदाहरण पर थोड़ा सुधार, प्रलेखन कहा गया है कि इस के रूप में अच्छी तरह से वैध है, और मैं इसे थोड़ा क्लीनर लगता है:

for form in br.forms(): 
    if form.attrs['id'] == 'sblock': 
     br.form = form 
     break 
+5

कुछ रूपों में एक आईडी नहीं है। यदि if statement में 'form.attrs.get ('id') का उपयोग करना है तो इसके बजाय एक KeyError से बचा जाता है। – awatts

7

भविष्य के किसी भी दर्शकों के लिए, यहाँ predicate तर्क का उपयोग एक और संस्करण है। ध्यान दें कि यह एक लैम्ब्डा के साथ एक ही पंक्ति में बनाया जा सकता है यदि आप ऐसा इच्छुक गया:

def is_sblock_form(form): 
    return "id" in form.attrs and form.attrs['id'] == "sblock" 

br.select_form(predicate=is_sblock_form) 

स्रोत: https://github.com/jjlee/mechanize/blob/master/mechanize/_mechanize.py#L462

0
g_form_id = "" 


def is_form_found(form1): 
    return "id" in form1.attrs and form1.attrs['id'] == g_form_id 


def select_form_with_id_using_br(br1, id1): 
    global g_form_id 
    g_form_id = id1 
    try: 
     br1.select_form(predicate=is_form_found) 
    except mechanize.FormNotFoundError: 
     print "form not found, id: " + g_form_id 
     exit() 


# ... goto the form page, using br = mechanize.Browser() 

# now lets select a form with id "user-register-form", and print its contents 
select_form_with_id_using_br(br, "user-register-form") 
print br.form 


# that's it, it works! upvote me if u like 
0

आप ब्राउज़र के समारोह select_form की विधेय परम उपयोग कर सकते हैं कक्षा। इस तरह:

from mechanize import Browser, FormNotFoundError 

try: 
    br.select_form(predicate=lambda frm: 'id' in frm.attrs and frm.attrs['id'] == 'sblock') 
except FormNotFoundError: 
    print("ERROR: Form not Found") 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^