代码之家  ›  专栏  ›  技术社区  ›  puppet

Send_keys()不发送完整字符串

  •  2
  • puppet  · 技术社区  · 8 年前

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    browser=webdriver.Chrome(r"C:\Users\Visente\Desktop\Pablito Python\chromedriver.exe")
    
    urlbet='https://www.bet365.es/?&cb=103265469#/HO/'
    
    browser.get(urlbet)
    
    sport=WebDriverWait(browser, 10).until(
            EC.presence_of_element_located((By.XPATH,'//*[@id="dv1"]/a')))
    
    sport.click()
    
    user=WebDriverWait(browser,
    10).until(EC.presence_of_element_located((
    By.XPATH,'/html/body/div[1]/div/div[1]/div/div[1]/div[2]/div/div[1]/input')))      
    
    passw=browser.find_element_by_xpath(
    '/html/body/div[1]/div/div[1]/div/div[1]/div[2]/div/div[2]/input[1]')     
    
    
    user.send_keys('my_user')
    passw.send_keys('password')  
    
    submit=browser.find_element_by_xpath(
    '/html/body/div[1]/div/div[1]/div/div[1]/div[2]/div/div[2]/button')`  
    
    submit.click()
    

    简而言之,y在变量上使用send_keys()的行 passw 没有写完整的密码,我不知道为什么。 顺便问一下,我如何取回刚才用sed_keys()发送的文本,以便知道传递了什么以及字符串中缺少了什么?

    2 回复  |  直到 8 年前
        1
  •  1
  •   Alberico Lima    7 年前

    我也有同样的问题,我先点击元素,然后发送文本,它解决了问题。

        el_search_wo.driver = driver.find_element_by_xpath("//*[@id='arid_WIN_0_302258625']")
        el_search_wo.click()
        el_search_wo.send_keys('TEXT HERE')
    
        2
  •  0
  •   Reti43    8 年前

    您不应该在所选字段中键入密码。正如您在注释中所注意到的,xpath从 input[1] input[2] . 后者是你应该输入密码的地方。我不理解当您尝试将键发送到那里时xpath发生变化的机制,但确实如此。根据更改的速度,从0到几个字符的任何内容都将发送到错误的输入,这解释了为什么密码字段以密码的子字符串结束。

    从html中,我们可以看到有3个输入字段,都属于该类 'hm-Login_InputField' .

    <div class="hm-Login ">
        <div class="hm-Login_UserNameWrapper ">
            <input type="text" class="hm-Login_InputField ">
            <div class="hm-Login_InputText " style="">
                Registrarse
            </div>
        </div>
        <div class="hm-Login_PasswordWrapper ">
            <input type="text" class="hm-Login_InputField Hidden ">
            <input type="password" class="hm-Login_InputField ">
            <button tabindex="0" class="hm-Login_LoginBtn ">
                IR
            </button>
            <div class="hm-Login_InputText ">
                Recordar contraseña
            </div>
        </div>
    </div>
    

    现在,如果您尝试将密钥直接发送到密码字段, 输入[2] ,则会出现元素不可见的错误。你必须先点击 输入[1] 为了使 输入[2] 看得见的

    使用XPath很容易做到这一点,但我发现以下方法更简洁。

    login = WebDriverWait(browser, 10).until(
            EC.presence_of_element_located((By.CLASS_NAME, 'hm-Login')))
    
    fields = login.find_elements_by_css_selector('.hm-Login_InputField')
    button = login.find_element_by_css_selector('.hm-Login_LoginBtn')
    
    fields[0].send_keys('user_name')
    fields[1].click()
    fields[2].send_keys('password')
    button.click()