美文网首页
selenium.common.exceptions.Eleme

selenium.common.exceptions.Eleme

作者: mutang | 来源:发表于2020-08-25 12:17 被阅读0次

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

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

    搜索到的方案:

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

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

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

    先展示原文件:

    <li data-value="f_three" role="presentation" class="bettype-button-list">#这里class变化 
        <a href="#f_three" aria-controls="f_three" role="tab" data-toggle="tab" 
           ariaexpanded="false"onclick="SetDefaultButton('f_three')">前</a>
    </li>
    html1 --------以上文件
    --------------------
    <div class="list bet-type-button-group">
        <span class="span_text">组</span>
        <div class="text">
            <ul class="">
                <li class="bet-type-button active" id="NumberMatchForL3StarC3Double"><span>xxx</span></li>
                <li class="bet-type-button" id="NumberMatchForL3StarC3Single"><span>yyy</span></li>
                <li class="bet-type-button" id="NumberMatchForL3StarC6Double"><span>zzz</span></li>
                <li class="bet-type-button" id="NumberMatchForL3StarC6Single"><span>aaa</span>
                    <span>AAAA</span>#这里
                </li>
                <li class="bet-type-button" id="NumberMatchForL3StarMix"><span>ccc</span></li>
                <li class="bet-type-button" id="NumberMatchForL3StarSum"><span>vvv</span></li>
                <li class="bet-type-button" id="NumberMatchionForL3StarD1"><span>bbb</span></li>
            </ul>
        </div>
    </div>
    ----- 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.Eleme

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

网友评论

      本文标题:selenium.common.exceptions.Eleme

      本文链接:https://www.haomeiwen.com/subject/npiajktx.html