在 CentOS 7 上使用 Selenium,在我的 CentOS 7 上获得 MoveTargetOutOfBoundsException,当脚本在 Mac OS 上 运行 Big 时不会发生苏尔
With Selenium on CentOS 7, getting a MoveTargetOutOfBoundsException on my CentOS 7, which doesn't occur when the script is run on Mac OS Big Sur
我正在使用带有最新 Selenium 的 Python 3.9 并拥有此代码,运行 在我的 Mac、Chrome 驱动程序 101 无头实例上很好 运行我的脚本 ...
element = self.driver.find_element(By.CSS_SELECTOR, "body")
actions = ActionChains(self.driver)
actions.move_to_element_with_offset(element, 0, 0).perform()
但是,当我 运行 在我的 CentOS 7 实例上使用 chromedriver 99(最新可用)时,我得到了这个错误
> raise exception_class(message, screen, stacktrace)
E selenium.common.exceptions.MoveTargetOutOfBoundsException: Message: move target out of bounds
E (Session info: headless chrome=99.0.4844.84)
/usr/local/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py:242: MoveTargetOutOfBoundsException
关于这意味着什么或我可能需要在我的 CentOS 7 设置上进行哪些额外配置的任何想法?很高兴重写代码,只要它在两种环境下都 运行s。
来自 MoveTargetOutOfBoundsException 的 Selenium 文档:
Indicates that the target provided to the actions move() method is invalid - outside of the size of the window.
来自 Actions class 文档:
moveByOffset(int xOffset, int yOffset)
Moves the mouse from its current position (or 0,0) by the given offset.
这个问题对我来说很奇怪,因为我们正在谈论 body 元素,不知何故它不在屏幕的可见部分,
你可以试试:
- 滚动到您的元素 - 使用 JavaScript 或 Selenium
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
- 等待元素加载完毕
- 不同的偏移量 - positive/negative.
- 获取 window 的 scrollheight/width 和主体的 X 和 Y 坐标 - 这可以帮助您调试问题。
document.body.scrollHeight
window.innerHeight
- 您可以尝试先点击或悬停该元素。
参考文献:
How to get the browser viewport dimensions?
https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.openqa.selenium.interactions.MoveTargetOutOfBoundsException
https://www.selenium.dev/selenium/docs/api/java/org/openqa/selenium/WebElement.html#getLocation()
move_to_element_with_offset方法用于将鼠标移动指定元素的偏移量。偏移量相对于元素的 top-left 角。通常,当我们手动移动任何元素时,我们也需要点击元素然后移动它。希望这会有所帮助,如果没有请告诉我。
element = self.driver.find_element(By.CSS_SELECTOR, "body")
actions = ActionChains(self.driver)
actions.move_to_element_with_offset(element, 0, 0).click().perform()
我正在使用带有最新 Selenium 的 Python 3.9 并拥有此代码,运行 在我的 Mac、Chrome 驱动程序 101 无头实例上很好 运行我的脚本 ...
element = self.driver.find_element(By.CSS_SELECTOR, "body")
actions = ActionChains(self.driver)
actions.move_to_element_with_offset(element, 0, 0).perform()
但是,当我 运行 在我的 CentOS 7 实例上使用 chromedriver 99(最新可用)时,我得到了这个错误
> raise exception_class(message, screen, stacktrace)
E selenium.common.exceptions.MoveTargetOutOfBoundsException: Message: move target out of bounds
E (Session info: headless chrome=99.0.4844.84)
/usr/local/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py:242: MoveTargetOutOfBoundsException
关于这意味着什么或我可能需要在我的 CentOS 7 设置上进行哪些额外配置的任何想法?很高兴重写代码,只要它在两种环境下都 运行s。
来自 MoveTargetOutOfBoundsException 的 Selenium 文档:
Indicates that the target provided to the actions move() method is invalid - outside of the size of the window.
来自 Actions class 文档:
moveByOffset(int xOffset, int yOffset)
Moves the mouse from its current position (or 0,0) by the given offset.
这个问题对我来说很奇怪,因为我们正在谈论 body 元素,不知何故它不在屏幕的可见部分, 你可以试试:
- 滚动到您的元素 - 使用 JavaScript 或 Selenium
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);
- 等待元素加载完毕
- 不同的偏移量 - positive/negative.
- 获取 window 的 scrollheight/width 和主体的 X 和 Y 坐标 - 这可以帮助您调试问题。
document.body.scrollHeight
window.innerHeight
- 您可以尝试先点击或悬停该元素。
参考文献:
How to get the browser viewport dimensions?
https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.openqa.selenium.interactions.MoveTargetOutOfBoundsException
move_to_element_with_offset方法用于将鼠标移动指定元素的偏移量。偏移量相对于元素的 top-left 角。通常,当我们手动移动任何元素时,我们也需要点击元素然后移动它。希望这会有所帮助,如果没有请告诉我。
element = self.driver.find_element(By.CSS_SELECTOR, "body")
actions = ActionChains(self.driver)
actions.move_to_element_with_offset(element, 0, 0).click().perform()