selenium.common.exceptions.ElementNotInteractableException:消息:元素不可交互使用Selenium Python将文本发送到“名字”字段

时间:2020-01-03 02:27:47

标签: python-3.x selenium xpath css-selectors webdriverwait

通过Selenium,我尝试在一个受欢迎的网站上输入用户名,但是由于某种原因,我不明白,这是行不通的。一切打开,在所需的输入字段上单击,但是在此之后立即尝试输入文本时出现错误。 这是我的代码:

webdriverDir = "./chromedriver.exe"  
home_url = 'https://appleid.apple.com/account/'

browser = webdriver.Chrome(executable_path=webdriverDir)
browser.get(home_url)
elem = browser.find_element_by_id("firstNameInput")
elem.click()
elem.send_keys('namename')
time.sleep(5)

我还尝试将解决方案更改为此:

browser.find_element_by_id("firstNameInput").send_keys("namename")

但是它也不起作用。我不明白怎么回事。 还尝试了xpathclass_namecss_selector。结果是相同的,或者根本就没有检测到元素。尽管所有内容都是从控制台的元素代码复制的。

错误代码:

selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable

哪里有错误?还是网站本身?

2 个答案:

答案 0 :(得分:0)

ID为SELECT Name, SUM(Amount) AS TAmnt, ProductPrice-SUM(Amount) AS OutB FROM t1 GROUP BY Name; 的元素不是输入,而是自定义标记,并且您的SELECT Name,SUM(Amount) AS TAmnt, SUM(ProductPrice)-SUM(Amount) AS OutB FROM t1 GROUP BY Name; 命令无法访问该元素。

您要做的是访问父元素中存在的输入。

firstNameInput

enter image description here

答案 1 :(得分:0)

要将字符序列发送到名字字段,您必须为element_to_be_clickable()引入 WebDriverWait ,您可以使用以下任一Locator Strategies

  • 使用CSS_SELECTOR

    driver.get("https://appleid.apple.com/account/")
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "first-name-input#firstNameInput input"))).send_keys("haruhi")
    
  • 使用XPATH

    driver.get("https://appleid.apple.com/account/")
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[@class='form-label' and normalize-space()='First name']//preceding::input[1]"))).send_keys("haruhi")
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • 浏览器快照:

create_your_apple_id