• selenium.common.exceptions.JavascriptException: Message: javascript error: Failed to execute 'elementsFromPoint' on 'Document': The provided double value is non-finite.


    1.这个项目是滑块缺口验证码,第一页点击滑块正常执行通过,第二页报错。

     

     perform无法执行,网上找了很多办法,如下:

    1.升级浏览器,本来就是权森版本

    2.升级驱动,本来就是权森版本

    3.升级selenium从3.1到3.4版本,说实话,惊呆我了,3.4特么的没有pause这个方法,手动滑稽~,没有这个方法,验证码也过不去,升级也没用

    4.使用JS执行按钮点击操作,的确是可以,但是我不要点击,我要左键点击保持不释放,手动滑稽~

    5.反正各种乱七八糟的方法都试过了,一团糟

    下面说下自己尝试的方法和思路:

    1.xpathhelper

     一直检查页面跳转或者html元素变动的情况下是否持续能获取到需要的元素,其实可以长时间获取到,说明xpath是没问题的哈

    2.查看页面html变化的规律,审查代码逻辑是否有失效的地方

    3.在页面执行某些操作后,打印页面源码或者元素信息查看是否有效定位元素

     4.如果还是不确定,还有几个办法

    F12 elements界面

     F12 Console界面

    $x('xpath表达式'),箭头的位置可以看到这个元素是唯一的

    元素获取都没问题的话,一起来看看这个错误是什么意思

     perform是

    from selenium.webdriver import ActionChains

    这个类执行的,官方的解释如下:

     

     再结合这个错误提示,大概意思就是ActionChains会产生类似于一个列表一样的东西,后面鼠标的操作都会按顺序提交到这个列表里,

    然后交由perform()一次直接执行,但是现在ActionChains中出现了两个相同的操作,或者是同一个步骤出现了两次,那么在第一个序列的操作

    执行完成之后,将此列表清空,上面的问题就可以处理掉了。

    恰好在国外的欧ver浮lower上看到一个方法:

    #action_chains.py文件中85行函数修改如下
    """
    Clears actions that are already stored locally and on the remote end
    """
    if self._driver.w3c:
        self.w3c_actions.clear_actions()
        for device in self.w3c_actions.devices:
            device.clear_actions()
    self._actions
    = []

    简单来说思路和上面说的一样,看到这个注释,突发奇想,如果ActionChains本身没有进行清空处理,

    那么在perform()执行之后再重申下清空掉之前的操作不就可以了吗

    slider = self.browser.find_element_by_xpath("/html/body/div[last()]/div[2]/div[2]/div[2]/div[2]")
    # if slider.is_displayed():
    self.action_chains.click_and_hold(slider)
    self.action_chains.pause(0.6)
    self.action_chains.move_by_offset(xoffset=xset, yoffset=0)
    self.action_chains.pause(0.9)
    self.action_chains.release()
    self.action_chains.perform()
    # 执行鼠标所有的操作之后,将ActionChains重置
    self.action_chains.reset_actions()

    于是很愉快了开始了摸鱼~~~~~

    自有风云来时雨, 似有风霜沾蓑衣
  • 相关阅读:
    妙味——字符串方法2
    妙味——字符串方法
    [LeetCode][JavaScript]Shortest Palindrome
    [LeetCode]Kth Largest Element in an Array
    [LeetCode][JavaScript]Word Ladder
    [LeetCode][SQL]Second Highest Salary
    [LeetCode][JavaScript]Clone Graph
    [LeetCode][JavaScript]Merge k Sorted Lists
    [LeetCode][JavaScript]Merge Two Sorted Lists
    [LeetCode][JavaScript]Valid Sudoku
  • 原文地址:https://www.cnblogs.com/meipu/p/13749836.html
Copyright © 2020-2023  润新知