Chromedriver + Selenium 無法發送's'密钥



使用 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,结果相同。 以前有人遇到过这个问题吗?我能做什么?

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


溶液

要找到字符序列并将其发送到元素,您必须诱导WebDriverWait等待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")
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

您可以将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的替代方案,以防这也是这里问题的一部分。

您可以通过添加等待来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)

相关内容

  • 没有找到相关文章

最新更新