[英]Chromedriver + Selenium cannot send 's' key
使用 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調用。 因此問題。
要定位並向元素發送字符序列,您必須為element_to_be_clickable()
引入WebDriverWait ,您可以使用以下任一解決方案:
使用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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.