2016-03-24 12 views
1

Hallo Ich versuche mich mit selen auf namecheap.com einzuloggen, kann aber die Login-Formulare nicht auswählen. Ich habe diesen Fehler bei der Auswahl der Elemente:Ich kann mich nicht mit python Selenium anmelden

selenium.common.exceptions.ElementNotVisibleException: Message: Element is not currently visible and so may not be interacted with 

Aber ich kann sehen, dass ich ok den XPath ausgewählt. Hier ist mein Code:

from selenium import webdriver 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.common.exceptions import TimeoutException 
from selenium.webdriver.common.keys import Keys 
from selenium.webdriver.common import action_chains 
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities 
import time 

cookie_file_path = 'cookie.txt' 

dcap = dict(DesiredCapabilities.PHANTOMJS) 
dcap["phantomjs.page.settings.userAgent"] =("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36") 

# driver = webdriver.PhantomJS(desired_capabilities=dcap,service_args=['--ssl-protocol=any','--ignore-ssl-errors=true','--cookies-file={}'.format(cookie_file_path)]) 
driver=webdriver.Firefox() 
driver.set_window_size(1024, 768) 
username='test' 
password='test123' 

driver.get('https://www.namecheap.com/myaccount/login.aspx') 

driver.find_element_by_xpath("//input[@name='LoginUserName']").send_keys(username) 
driver.find_element_by_xpath('//input[@name="LoginPassword"]').send_keys(password) 
loginButtonXpath = "//input[@type='submit']" 
driver.find_element_by_xpath(loginButtonXpath).click() 
driver.save_screenshot('testing.png') 

und hier ist die HTML:

    <div class="sign-in-form"> 
        <fieldset> 
         <input type="text" name="LoginUserName" title="Username" placeholder="Username" autocapitalize="off" autocorrect="off" class="input removespecialchars handlereturn" maxlength="20" /> 
         <input type="password" name="LoginPassword" title="Password" placeholder="Password" class="input handlereturn" maxlength="100" /> 
         <input type="hidden" name="hidden_LoginPassword" /> 
         <a href="https://www.namecheap.com/myaccount/login.aspx" id="ctl00_ctl00_ctl00_ctl00_base_content_web_base_content_topNavLoginLink" class="head-loginb ncRedirectButton btn sign-in-btn btn-block" rel="nofollow">Sign In</a> 
         <a href="https://ap.www.namecheap.com/ResetPassword" id="ctl00_ctl00_ctl00_ctl00_base_content_web_base_content_passwordRemiderLink" title="Password Reminder">Forgot your password?</a> 
        </fieldset> 
        </div> 
       </div> 
      </li> 
      <li class="hidewhenloggedin"><a href="/myaccount/signup.aspx">Sign Up</a></li> 
      <li class="expandable signed-in hidewhennotloggedin user-menu"> 

Können Sie mir helfen? Vielen Dank

Antwort

0

Es scheint, dass Ihre xPath-Locators (für Login/Benutzername) der Grund für einen Fehler sind.

Versuchen Sie folgende CSS Locators mit ..

Username 
css=div.group > input[name="LoginUserName"] 

Password 
css=div.group > input[name="LoginPassword"] 

Allgemeinen XPath sind zerbrechlicher als zu CSS Locators verglichen. Also, es wird gut sein, mit CSS-Locators zu gehen.

+0

Nein ... Ich habe den gleichen Fehler - mit driver.find_element_by_css_selector ('input [name = "LoginUserName"]'). Send_keys ('aaaaa') –

+0

Ahh ... mein Schlechter ... funktioniert jetzt .. .Vielen Dank! –

+0

Schlüssel verwendet ganze CSS-Selektor. froh, dass es für dich funktioniert :) – TestingWithArif

0

Sie importiert WebDriverWait und expected_conditions aber Sie sie nicht

WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, "//input[@name='LoginUserName']")).send_keys(username) 

Dies wird warten bis zu 10 Sekunden für das Element sichtbar sein verwenden.

+0

Ich korrigierte meinen Code - TestingWithArif war die Antwort. Vielen Dank –

Verwandte Themen