为什么 selenium 的move_by_offset功能在执行前会等待一段时间 (Python/Chrome)

Why does selenium's move_by_offset function sometime waits before executing (Python/Chrome)

提问人:John Doe 提问时间:11/3/2018 最后编辑:undetected SeleniumJohn Doe 更新时间:10/17/2019 访问量:1657

问:

我在 Chrome 中使用 Selenium 和 Python 来自动执行一些测试,其中一部分是移动鼠标,因为我正在创建大量测试,我在线程上并行运行它们。唯一真正给我带来问题的代码是以下几点:

action =  selenium.webdriver.common.action_chains.ActionChains(driver)
action.move_by_offset(x,y)
action.perform()

由于某种原因,有时上述操作至少需要 5 秒,例如 5.03123 秒才能执行。当有延迟时,它总是只略高于 5,但从不低于 5,这让我相信某个地方有时间.sleep(5)。我已经检查了 selenium actionchains 文件并注释掉了:

self.w3c_actions.key_action.pause()

如果这是罪魁祸首,但没有重大变化。

一个重要的注意事项是,当我的窗口最小化并且我有多个线程运行时,这似乎是一个更大的问题/更频繁地发生。

我非常茫然为什么会发生这种情况,并且尝试了一堆不同的东西/测试,但基本上无济于事。非常感谢任何和所有的帮助。

如果您需要任何其他信息,或者我应该运行其他特定测试,请告诉我,我会的。

python selenium google-chrome selenium-chromedriver

评论


答:

0赞 undetected Selenium 11/4/2018 #1

你做错了,注释掉了这一行:

self.w3c_actions.key_action.pause()

在方法中,对 key_action.pause() 的调用是出于超出此问题范围的目的而实现的。通过所有可能的方式,您不会更改源代码客户端代码move_by_offset()

窗口最小化

在执行 Selenium 测试时,您需要保持窗口最大化

您会在 Way to open Selenium browser not ovelapping my current browser 中找到相关讨论

评论

1赞 Jinhua Wang 5/19/2021
为什么这个问题超出了范围?
1赞 binboum 10/17/2019 #2

您可以重写该方法:

class ActionChainsChild(ActionChains):
   def move_by_offset(self, xoffset, yoffset):
        """
        Moving the mouse to an offset from current mouse position.

        :Args:
         - xoffset: X offset to move to, as a positive or negative integer.
         - yoffset: Y offset to move to, as a positive or negative integer.
        """
        if self._driver.w3c:
            self.w3c_actions.pointer_action.move_by(xoffset, yoffset)
            #self.w3c_actions.key_action.pause()
        else:
            self._actions.append(lambda: self._driver.execute(
                Command.MOVE_TO, {
                    'xoffset': int(xoffset),
                    'yoffset': int(yoffset)}))
        return self

实用链接:

https://seleniumhq.github.io/selenium/docs/api/py/_modules/selenium/webdriver/common/action_chains.html

https://www.thedigitalcatonline.com/blog/2014/05/19/method-overriding-in-python/