2011-12-20 11 views
7

के साथ प्रपत्र सबमिट करना ठीक है, मैं पाइथन और मशीनीकरण का उपयोग करके किसी साइट पर लॉगिन करने का प्रयास कर रहा हूं।मैकेनाइजेशन (पायथन)

मुझे मिल गया है साइट खोला:

site = br.open("http://example.com/login.php") 

और मैं (br.forms के साथ) रूपों की एक सूची मिल गया है।

<GET http://example.com/search.php application/x-www-form-urlencoded 
<HiddenControl(search=1) (readonly)> 
... 
<POST http://example.com/login.php application/x-www-form-urlencoded 
<TextControl(username=)> 
<PasswordControl(password=)> 
<CheckboxControl(stay=[1])> 
<SubmitControl(<None>=Log in) (readonly)>> 

मैं उपयोगकर्ता नाम और पासवर्ड फ़ील्ड जमा करने का प्रयास कर रहा हूं।

मैं इस तरह से यह कर की कोशिश की:

br.select_form(nr=0) 
br.form["username"] = 'usernamehere' 
br.form["password"] = 'passwordhere' 
br.submit() 

तब मुझे एहसास हुआ कि मैं रूपों में भरने के लिए कोशिश कर रहे थे पृष्ठ पर पहले नहीं थे, लेकिन बदलते 0 कुछ भी साथ मदद नहीं की। इस तरह के पेज पर फॉर्म का चयन करने के लिए मुझे क्या करना चाहिए?

हालांकि! यह एकमात्र समस्या नहीं है।

Traceback (most recent call last): 
File "C:\Python26\login.py", line 34, in <module> 
br.form["username"] = 'usernamehere' 
... 
ControlNotFoundError: no control matching name 'username' 

मैं इसे कैसे ठीक कर सकते हैं:

जब मैंने इसे चलाने के लिए, मैं इस त्रुटि मिलती है? डी: या मैं इसे पूरी तरह से गलत कर रहा हूँ? यदि यह उत्तरार्द्ध है, तो मैं इसे करने के बारे में कैसे जाऊं?

उत्तर

4

जैसा कि इसके नाम का उपयोग कर एक विधि चुनने के लिए आप का उपयोग करना चाहिए:

br.select_form(name="order") 

क्या तुम यहाँ क्या कर रहे हैं:

br.form["username"] = 'usernamehere' 

चयनित फॉर्म के तहत नियंत्रण में एक मान सेट करने का प्रयास कर रहा है, इसलिए जब उसे यह नहीं मिल रहा है, तो यह आपके द्वारा देखे जा रहे अपवाद को फेंकता है।

+0

br.select_form (name = "username") एक त्रुटि को वापस फेंक देता है: FormNotFoundError: कोई फ़ॉर्म मिलान करने वाला नाम 'उपयोगकर्ता नाम' - जैसा कि पहले जैसा नहीं है, लेकिन इस बार मैंने अभी लाइन को जोड़ा है। – Matthew

+0

क्या आप वाकई सही नाम रखते हैं? br.forms() में फॉर्म के लिए प्रयास करें: प्रिंट फॉर्म – tovmeod

+0

सकारात्मक। मैंने br.forms() और कच्चे HTML की जांच की। – Matthew

0

आप कई मुद्दों

  • हो सकता है यदि प्रपत्र जावास्क्रिप्ट के माध्यम से उत्पन्न होता है, तो आप मशीनीकरण के साथ इसे हल नहीं कर सकते हैं - कम से कम एक सीधे आगे रास्ते में नहीं - इस मामले में मैं कोशिश करने के लिए आप की सिफारिश और selenium का उपयोग करें - आप एचटीएमएल स्रोत को देखने का प्रयास कर सकते हैं - अगर आपके पास शुद्ध एचटीएमएल में फॉर्म नहीं है, तो यह स्पष्ट है कि इसे जावास्क्रिप्ट द्वारा डीओएम में डाला गया है। इसके अलावा, अगर प्रपत्र जावास्क्रिप्ट के माध्यम से प्रस्तुत किया जाता है, मशीनीकरण में मदद नहीं करेगा आप

  • भी प्रपत्र पहले पृष्ठ पर नहीं हो सकता है - आप रीडायरेक्ट का पालन करने के मशीनीकरण सेट करना चाहें

+0

नहीं, यह जावास्क्रिप्ट नहीं है। और मैं urllib के साथ फॉर्म ठीक कर सकता था ... मैं बस मैकेनाइजेशन का उपयोग करता हूं क्योंकि मुझे यकीन नहीं है कि कुकीज वास्तव में कैसे काम करता है और मुझे लॉग इन रहने की आवश्यकता है> _> और login.php फॉर्म स्थान है। मुझे यकीन है। – Matthew

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