一、问题情况
我打算使用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也是甩浏览器和操作系统的锅
如果有大神知道,欢迎科普一下