Send_keys() 不发送完整的字符串

问题描述 投票:0回答:3

我正在尝试使用 Python 中的 selenium 和 Chrome 登录网站。我能够找到用户和密码字段以及按钮。我唯一不能做的就是用所有字符串填充密码字段。它写入一个长度不同的子字符串。

我的代码

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 在变量

passw
上使用 send_keys() 的行没有写入密码的完整长度,我不知道为什么。 顺便问一下,我如何取回刚刚使用 sed_keys() 发送的文本,以便了解正在传递的内容以及字符串中缺少的内容?

python selenium selenium-webdriver selenium-chromedriver sendkeys
3个回答
1
投票

我遇到了同样的问题,我首先单击元素然后发送文本,它解决了问题。

    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')

0
投票

您不应在所选字段中输入密码。正如您在评论中指出的,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>

如果你把它们全部收集起来,从上到下,它们是用户名、你试图输入密码的字段和密码字段。

现在,如果您尝试将密钥直接发送到密码字段,

input[2]
,您将收到一条错误消息,表明该元素不可见。您必须先单击
input[1]
才能使
input[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()

0
投票

我通过ActionChains找到了解决方案,你可以在那里看到:https://stackoverflow.com/a/77707715/21201331

© www.soinside.com 2019 - 2024. All rights reserved.