我尝试使用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()返回我刚刚发送的文本,以便知道传递的内容和字符串中缺少的内容?
答案 0 :(得分:1)
您不应该在您选择的字段中输入密码。正如您在评论中指出的那样,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()
答案 1 :(得分:0)
我遇到了同样的问题,我首先单击元素,然后发送文本,它解决了问题。
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')