2012-08-12 8 views
5

मैं एक तत्व दिखाई त्रुटि नहीं है मिलती है:त्रुटि अजगर के साथ सेलेनियम का उपयोग कर वेबपृष्ठ की प्रवेश का प्रयास करने

from selenium import webdriver 
browser = webdriver.Firefox() 
browser.get('http://www.example.com') 
browser.find_element_by_name('username').send_keys('myusername') 
browser.find_element_by_name('password').send_keys('mypassword') 
browser.find_element_by_class_name('welcomeLoginButton').click() 

HTML: जब मैं इस कोड को चलाने

ElementNotVisibleException: Message: u'Element is not currently visible and so may 
not be interacted with' 

हर खोजने के तत्व लाइन के लिए पृष्ठ के लॉगिन अनुभाग के लिए इस तरह दिखता है:

<div class='welcomeLoginUsername'> 
<div class='welcomeLoginUsernameLabel'><b>Username:</b></div> 
<div class='welcomeLoginUsernameInput'><input type='text' name='username' tabindex='1'> 
<br><a class='sf' href='javascript: void(0);' onclick='showUsernamePopup();'> 
<b>Forgot Username?</b></a> 
</div> 
</div> 
<div class='welcomeLoginPassword'> 
<div class='welcomeLoginPasswordLabel'> 
<b>Password:</b> 
<br><span class='sf'>(It's cAsE sEnSitIvE!)</span> 
</div> 
<div class='welcomeLoginPasswordInput'> 
<input type='password' name='password' tabindex='2'> 
<br><a class='sf' href="javascript: void(0);" onclick="showPasswordPopup();"> 
<b>Forgot Password?</b></a> 
</div> 
</div> 
</div> 
<input type="submit" value="" class='welcomeLoginButton' style='border: 0px; 
padding: 0px; margin: 0px;) no-repeat;' onclick='document.forms["login"].submit()'> 

उत्तर

6

सेलेनियम वेब ब्राउजर के साथ उसी तरह से बातचीत करता है जैसे उपयोगकर्ता होगा। तो यदि कोई HTML तत्व है जिसके साथ आप बातचीत करने की कोशिश कर रहे हैं तो दिखाई नहीं दे रहा है तो सबसे सरल स्पष्टीकरण यह है कि जब आप अपना सेलेनियम कोड लिख रहे हैं तो आप सामान्य उपयोगकर्ता की तरह वेब पेज से बातचीत नहीं कर रहे हैं।

अंत में यह आपके वेब पेज के एचटीएमएल और उसके तत्व की छिपी हुई विशेषता के बारे में नहीं है। मेरा सुझाव है कि आप फायरबग या कुछ अन्य एचटीएमएल व्यूअर प्रोग्राम डाउनलोड करें, और फिर उस बटन को हाइलाइट करें जिसे आप दबाएं। एचटीएमएल व्यूअर के लिए डोम लुकअप का प्रयोग करें और मैन्युअल रूप से साइन इन प्रक्रिया के माध्यम से जाएं। ध्यान दें कि तत्व को इसके साथ संवाद करने के लिए आपको क्या करना है, फिर अपने सेलेनियम कोड में एक ही चरण की नकल करें।

यदि यह तथ्य है कि आपने जो कुछ भी करने की आवश्यकता है, वह सब कुछ किया है, लेकिन सेलेनियम वेब पेज के साथ तेजी से बातचीत कर रहा है, जावास्क्रिप्ट तत्व को दृश्यमान बना देगा, फिर एक ऐसा इंतजार है जिसमें आपको प्रोग्राम करना होगा।

अनुभवहीन रास्ता:

import time 
time.sleep(1) # this is done in seconds 

अधिक स्केलेबल ढंग:

import time 

welcome_button = browser.find_element_by_class_name('welcomeLoginButton') 

wait_for_element_visibility(welcome_button).click() 

def wait_for_element_visibility(element): 
    if element.is_visible(): 
     return element 
    else: 
     for i in range(10): 
     if not element.is_visible(): 
      time.sleep(.5) 
     else: 
      return element 
+6

आप इस्तेमाल कर सकते हैं [ 'WebDriverWait() until' या' browser.implicitly_wait (1) '।] (http: // seleniumhq.org/docs/ 04_webdriver_advanced.html) 'time.sleep()' के बजाय। – jfs

+0

अपने फ़ायरबग सलाह पालन करने के बाद मैं निम्नलिखित करने के लिए कोड बदल दिया है:। browser.find_element_by_class_name ('welcomeLoginUsernameInput') find_element_by_name ('उपयोगकर्ता नाम') send_keys ('उपयोगकर्ता नाम') browser.find_element_by_class_name ('welcomeLoginPasswordInput') find_element_by_name।। ('पासवर्ड')। send_keys ('पासवर्ड') browser.find_element_by_class_name ('welcomeLoginButton')। क्लिक करें() मुझे नहीं दिखाई त्रुटि अब और एक तत्व प्राप्त न करें और उसे सबमिट बटन पर क्लिक करता है, लेकिन किसी कारण के लिए अपने इनपुट फ़ील्ड में नाम और पासवर्ड दर्ज नहीं करना। – Frozsht

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

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