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

** 关于这个错误,我花费了一天时间,在此记录下设想过程、解决思路和最终方案:**

  1. 设想一:当然Google搜索啦,各种情况都有,其中最逗比的评论是:此报错很玄学,完全看人品。貌似有点道理,在操作的浏览器的模块中不报错,而把这模块导入其他模块执行时报错。当时我有种将两个模块写在一起的冲动,最终为防止逻辑混乱,代码难看才没合二为一。

    搜索到的方案:

    1. 将ChromeDriver.exe放置在.Py文件中的
    2. 设置睡眠时长的
    3. 修改环境的:Chrome的版本,ChromeDriver的版本,selenium的版本,python的版本

    对我的报错没用,大家可以试试

  2. 设想二:调用网页中的js函数

    先展示原文件:

    
    html1 --------以上文件
    --------------------
    
    • xxx
    • yyy
    • zzz
    • aaa AAAA#这里
    • ccc
    • vvv
    • bbb
    ----- html2

    分析:点击HTML1中a标签,执行onclick()函数,使得class属性加上active(bootstrap中改变其css,使得HTML2文件显示出来),ariaexpanded变为True,

    我需要点击html2中的span标签,使得其父级标签Li的class属性加上active

    python代码实现:

    #此处元素隐藏,点击后可见,但不可操作
    sleep(2)
    js = "return SetDefaultButton('f_three')"
    self.dr.execute_script(js)
    

    还是同样报错,看来调用网页js不好使,那我自己写js

    3. 设想三:不使用网页js,使用jQuery写的js (网页加载jQuery)

    代码实现:

    sleep(2)
    js = "$('#NumberMatchForM3StarC6Double > span').click()"
    self.dr.execute_script(js)
    

    ok!完美解决!

    总结:

    1. element not interactable 谷歌翻译------------------> 元素不可交互,原因:元素被隐藏,即使HTML2中li标签都可见,但用selenium的click函数却无法点击。看来“可见”和“可操作”对人而言是一样,对selenium而言是两种状态。
    2. 此时,该考虑用js代码来解决。事实证明,使用网页中js代码,没用。我用jQuery写的js代码,最终实现功能。用原生js还是jQuery中的js应该都行,当然分网页有没有用引入jQuery

你可能感兴趣的:(selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable (...)