问题描述:
元素定位成功,但是click()失败。报错:selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
原因分析:
1、未放鼠标在元素上,元素的标签:
2、放了鼠标在元素上:元素的标签:
3、从元素上移开鼠标,元素的标签:
4、相比较之前,元素的标签属性多了“class=’’”,因此改变的元素的内容,无法click()。
解决方案:
1、解决方式,调用ActionChains(),模拟人类操作过程,先定位的元素为,
然后把鼠标移到元素上,这时元素标签的属性改变了多了class=“focus”,因此需要重新定位元素,然后click()。
解决代码:
1、my_error_element=driver.find_element(By.XPATH,"//*[@id=‘importRenewMiCoinForm’]/div[2]/div/div/div/div/div/ul/li[3]")
2、print(my_error_element.get_attribute(‘outerHTML’))
3、my_action.move_to_element(my_error_element).perform()
4、driver.find_element(By.XPATH,"//*[@id=‘importRenewMiCoinForm’]/div[2]/div/div/div/div/div/ul/li[3]").click()
**解释:
步骤1,定位元素。步骤2,看一下是否定位成功,并输出元素的所有标签内容。步骤3,将鼠标放在该元素上。步骤4,重新定位元素,并点击元素。**
关于步骤3的前期import部分和调用部分
1)from selenium.webdriver.common.action_chains import ActionChains
2)driver=webdriver.Chrome()
3)my_action=ActionChains(driver)
4)url0=“http://us.tracksolidpro.com/mainFrame”
5)driver.get(url0)
我的猜想,没研究click()源码部分,猜想不对的话,请大佬指点。
我的猜想是,click()点击一个元素时,先将鼠标放在该元素上,然后传入需要的定位的元素的参数。因此,click失败了。因为鼠标放在元素上后,元素的属性改变了,而传入的参数却是老旧的,所以无法点击。