使用Python 3.7.4,Selenium 3.141.0,Chromedriver 78和Chrome 78。
我正在尝试自动登录网页,但是当我以表单的形式向输入发送键时,它会发送除“ s”字母以外的所有字符。
input = form_element.find_element_by_xpath(password_xpath)
input.send_keys("password")
它只写“ paword”。我在其他查询中也看到过此问题,但Chromedriver版本过旧。我也尝试使用“ \ s”,但它写为“ \”。
找不到任何相关文档。我尝试使用Chrome 77 + Chromedriver 77,结果相同。 有人遇到过这个问题吗?我该怎么办?
答案 0 :(得分:0)
当您尝试标识密码字段并随后发送字符序列时,可能正在进行某些或JavaScript调用。因此是问题。
要找到字符序列并将其发送到元素,您必须为npm config set msvs_version 2015
诱导 WebDriverWait ,并且可以使用以下解决方案之一: / p>
使用element_to_be_clickable()
:
CSS_SELECTOR
使用WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "password_css"))).send_keys("password")
:
XPATH
注意:您必须添加以下导入:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "password_xpath"))).send_keys("password")
答案 1 :(得分:0)
您可以将send_keys
包装在一种方法中,以在每次按下字符之间等待一段时间来缓慢发送键。这可能有助于减慢密钥发送的速度,并允许现场触发任何Javascript事件,而不会中断您的密钥发送:
def slowly_send_keys(field, text):
for c in text:
field.send_keys(c)
time.sleep(0.1)
您可以这样称呼:
input = form_element.find_element_by_xpath(password_xpath)
slowly_send_keys(input, "password")
在这里每次按键之间我们只等待0.1秒。有时Selenium会非常快速地发送密钥,并且并非所有的击键都已注册,因此该解决方案旨在解决该潜在问题。
在上述Debanjan的解决方案中提到了这一点,在密码字段上调用WebDriverWait
也应该有助于解决您的问题-我也想提供send_keys
的替代方法,以防万一,这也是该问题的一部分
答案 2 :(得分:0)
您可以{ id: 1, name: "test" }
通过添加等待时间Send Keys
来确保Element Not Clickable
的正确性,Xpath
!
如果您不给予权利XPATH
,这也会给您带来错误
对于正确的Xpath
,您可以在chrome中使用选择器小工具
好吧,如果你给的权利XPATH
然后:
尝试此代码!
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as
input = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "YOUR XPATH"))).send_keys("Your Password")
您也可以在此处添加等待字符的方式!
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as
input = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "YOUR XPATH")))
for p in input:
input.send_keys(p)
time.sleep(0.5)