我正在尝试在输入字段中输入我的名字。建立硒似乎很简单,但是我无法弄清楚自己在做什么错。
name = driver.find_element_by_xpath('//input[@id="signUpName16"]')
name.send_keys('Josh')
我知道驱动程序可以工作,因为我已经能够单击其他元素。我知道xpath是正确的,因为我从chrome inspector复制了它。我得到的错误是
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
我看到人们说要尝试单击或清除元素,所以我也尝试过,但是仍然失败。
name = driver.find_element_by_xpath('//input[@id="signUpName16"]')
name.click()
name.send_keys('Josh')
将其作为名称。click()行
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
答案 0 :(得分:0)
这里有些错误可能会出错。如果input
尚未完全加载,那么如果您尝试在send_keys
就绪之前进行尝试,它将抛出此异常。我们可以在WebDriverWait
元素上调用input
,以确保在将键发送给它之前已完全加载:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
input = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[contains(@id, 'signUpName')]")))
input.send_keys("Josh")
如果仍然抛出异常,我们可以尝试通过Javascript设置input
值:
input = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[contains(@id, 'signUpName')]")))
driver.execute_script("arguments[0].value = 'Josh';", input)
如果这些解决方案都不起作用,我们可能需要在正在使用的页面上查看一些HTML,以查看此处是否还有其他问题。
答案 1 :(得分:0)
ElementNotInteractableException 发生时间
请参考以下代码来解决此问题:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait as Wait
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome(executable_path=r"C:\New folder\chromedriver.exe")
driver.set_page_load_timeout("10")
driver.get("your url")
actionChains = ActionChains(driver)
element = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.XPATH, "//input[@id='signUpName16']")))
actionChains.move_to_element(element).click().perform()
解决方案2:
element = WebDriverWait(driver, 10).until(
EC.visibility_of_element_located((By.XPATH, "//input[starts-with(@id,signUpName')]"))) # if your signUpName16 element is dynamic then use contains method to locate your element
actionChains.move_to_element(element).click().perform()