Chromedriver + Selenium无法发送's'键

时间:2019-11-29 12:44:34

标签: python selenium google-chrome selenium-chromedriver

使用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,结果相同。 有人遇到过这个问题吗?我该怎么办?

3 个答案:

答案 0 :(得分:0)

当您尝试标识密码字段并随后发送字符序列时,可能正在进行某些screenshotJavaScript调用。因此是问题。


解决方案

要找到字符序列并将其发送到元素,您必须为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)