我正在尝试发送用户名和密码的密钥,以便登录以下网站(是的,移动版(:
https://m.bancosecurity.cl/
我总是收到同样的错误:
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable: [object HTMLInputElement] has no size and location
(Session info: chrome=91.0.4472.164)
我的代码是:
Username = driver.find_element_by_xpath('//*[@id="UserName"]')
driver.execute_script("arguments[0].click();", Username)
Username.send_keys("xx.xxx.xxx-x")
产生错误的代码是:
Username.send_keys("xx.xxx.xxx-x")
谢谢!
我可以看到页面上有多个输入,所以尝试使用帮助元素索引访问它
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
username= WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "((//input[@id='UserName'])[2])")))
username.send_keys("Username")
password= WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "((//input[@id='Password'])[2])")))
password.send_keys("passowrd")
因此,上面我刚刚用excplicitWait
和send_keys检查了元素是否存在到输入
该页面上有2个元素与//*[@id="UserName"]
XPath选择器匹配。第一个不是用send_keys
接收用户输入的字段
因此,在使用Seleniumsend_keys
向其发送字符串输入时,单击它(尤其是使用JavaScript单击它(不会起任何作用
您应该做两件事来让您的代码在这里工作:
- 设置显式等待,以便在访问元素之前加载页面
- 使用正确的定位器
试试这个:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 20)
username = wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@class='panel' and contains(@style,'block')]//*[@id='UserName']")))
username.click()
username.send_keys("xx.xxx.xxx-x")