关于Selenium时,报错Message: move target out of bounds: viewport size的问题

一、问题情况


我打算使用selenium解决滑动验证码情况,然而因为鼠标移动超出视口大小报错 这里的视口大小你可以理解为可控制的窗口区域

from time import sleep
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By

class Base():
    '''
    设置edge浏览器启动项
    设置网页链接
    '''

    def __init__(self):
        option = webdriver.EdgeOptions()
        option.add_argument('--start-maximized')  # 最大化窗口
        self.wd = webdriver.Edge("msedgedriver", options=option)
        self.wd.get("http://www.baidu.com")
        sleep(2)

    def main(self):
        # 验证码元素
        ele = self.wd.find_element(By.ID, "314")
        # 鼠标左键按住滑块
        ActionChains(self.wd).click_and_hold(ele).perform()
        distance = 300  # 横向滑块需要移动的距离
        # 滑动模块
        ActionChains(self.wd).move_by_offset(distance, 0).release().perform()
        sleep(2)

if __name__ == "__main__":
    a = Base()
    a.main()


报错信息截图如下

我查了相关资料,selenium存在这种问题,视口尺寸也就是实际窗口小于屏幕分辨率

二、尝试方法


1、我尝试设置全屏模式和最大化窗口,然而实际窗口还是小于屏幕分辨率

option.add_argument('--kiosk')  # 全屏模式
option.add_argument('--start-maximized')  # 最大化窗口

2、 我也尝试按照网上使用JavaScript滑动界面至右下角,使视口发生移动,结果没啥用

driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')

三、解决办法


运气下找到了一个方法莫名解决了,就是设置缩放比例为百分百

option.add_argument("--force-device-scale-factor=1")

四、总结


这个问题的解决我也是莫名其妙,问了ai也是甩浏览器和操作系统的锅
如果有大神知道,欢迎科普一下

### 回答1: selenium.common.exceptions.movetargetoutofboundsexception: message: move target out of bounds 的意思是移动目标超出了边界。这通常是因为你试图将鼠标或键盘移动到一个不可见或超出屏幕范围的位置。解决方法是调整你的代码,确保移动的目标在屏幕内,并且可见。 ### 回答2: selenium.common.exceptions.movetargetoutofboundsexception是selenium的一个异常,它通常在进行鼠标或者键盘操作出现。异常的具体信息是“move target out of bounds”,也就是移动目标超出了范围。 出现这个异常往往是因为selenium在模拟用户的鼠标或者键盘操作,尝试把鼠标或者键盘移动到一个超出屏幕范围的位置上,这个候就会出现这个异常。 要解决这个异常,我们需要检查一下我们的代码中是否有把鼠标或者键盘移动到了超出屏幕范围的位置。我们可以通过打印出详细的错误信息来找到具体出现异常的代码位置。一般来说,这个错误的出现是因为我们在代码中设置了错误的坐标位置,所以需要重新设置合适的坐标位置。 可以通过以下几种方法来解决这个异常: 1. 确保我们的代码中的鼠标或键盘移动操作的坐标值没有超过屏幕的范围。 2. 使用selenium提供的一些方法来设置鼠标或键盘移动的位置,比如move_to_element_with_offset()方法。 3. 当我们无法确定正确的坐标位置,可以通过调试代码来找出问题所在,或者通过参考selenium的官方文档来找到正确的解决方法。 总之,在使用selenium进行自动化测试,我们要刻注意浏览器窗口的大小和位置,以及我们在代码中设置的坐标值是否正确,这样才能避免出现这种异常。 ### 回答3: selenium.common.exceptions.movetargetoutofboundsexception是Selenium自带的一个异常,常见于使用SeleniumWeb自动化测试过程中。这个异常通常是因为Selenium无法将鼠标或键盘移动到页面的某个元素上,因为该元素不在可见视图内,或被其他元素所遮挡。 当我们使用move_to_element()或click()等方法在元素上进行鼠标操作,如果该元素被其他元素所遮挡或者不在可视区域内,就会出现该异常。此,我们需要先把需要操作的元素移到可视区域内,或者通过JS将覆盖它的元素删掉,然后再进行鼠标操作。 另外,该异常也可能是由于页面加载缓慢或网络延迟等原因导致的。为了解决这类问题,我们可以等待一段间再进行操作,或者使用显式等待方法等待页面元素的加载。 总之,当出现selenium.common.exceptions.movetargetoutofboundsexception,我们需要仔细排查页面元素的位置和可见性,并采取相应的解决措施。这样才能保证我们的Web自动化测试脚本能够稳定、可靠地执行,提高测试效率和质量。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虫虫仙人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值