【Python】seleniuim 计算滑块元素的位置,以及拖动完成滑块验证码

如果我们要了解某个元素在整个屏幕中的位置,例如滑动验证码的滑块之类的。这就像是在网页上画了个直角坐标系,找到它在网页或者电脑屏幕的横坐标和纵坐标的位置,就像是在地图上找到我们所在的位置一样,定位到那个元素的位置。

在这里插入图片描述
上图是打个比方~

1. 获取某个元素在电脑的【绝对】位置

可以使用下面的方法:

button_ = driver.find_element(By.CSS_SELECTOR, '# button')
x_= button_ .rect['x'] 
y_= button_ .rect['y']
print("按钮在网页上的相对位置  x: ", x_, " y: ", y_)

这样就可以知道某个网页元素,例如按钮在网页中的位置了。

但是这个有个前提,需要网页放大至最大化,几乎是电脑屏幕那么大,执行效果就像是按下了F11, 这样这个元素才是上面相对位置的大小。

如果没有放大,那么这个位置是不准的,如果使用pyautogui去点击这个位置,就会发现点错了。

这是因为电脑屏幕尺寸、屏幕像素、以及网页尺寸三者不一样的时候,使用网页位置定位出来的元素位置信息,就会跟电脑屏幕的位置匹配不上了。

上一期写了,【Python】selenium获取定位元素大小、电脑屏幕的像素、屏幕尺寸信息、以及网页尺寸的方法
下面的各个对象的计算方法可以参考上面的文章~

2. 获取某元素相对于整个屏幕上的【相对】位置

如果我们想计算某些网页元素相对于整个屏幕上的位置,(例如滑动验证码的滑块按钮的位置),然后再计算出像素位置,这样可以排除像素和物理长度的差别 公式:

某元素在网页上的相对位置= (按钮的图片像素+ 电脑屏幕的像素 - 网页尺寸) * (电脑屏幕的像素 / 屏幕尺寸)

PositionX = (button_.rect['x'] + screenx - documentx) * (windowx / screenx)
PositionY = (button_.rect['y'] + screeny - documenty) * (windowy / screeny)

print("的相对位置  x: ", PositionX, " y: ", PositionY)
print (PositionX, PositionY)

如果是 拉动滑块按钮,类似是得出了下面的滑块按钮在网页上的相对位置

如果要拖动验证码移动的话,就要加上滑块大小的位置(例如下图的蓝色箭头的大小)
在这里插入图片描述

3. 计算滑块的距离长度

计算距离的方法:

from selenium import webdriver
import pyautogui
import time
driver = webdriver.Chrome(options=option)

time.sleep(3)
driver.maximize_window()  # 最大化窗口
time.sleep(6)
current_position = pyautogui.position()
print(f"目标移动位置:X={xx}, Y={y}")
print(f"当前鼠标位置:X={current_position.x}, Y={current_position.y}")

可以运行上面的代码,然后再休息期间,鼠标放在滑块中心,分别计算出两个滑块的位置,然后计算长度(例如上面红色箭头),从而可以计算滑块中心的距离,假设滑块的距离是25,则滑块的x坐标和y坐标的位置是:

SLIDE_X_POSITION = PositionX+ 25  # 抓取滑块的中心
SLIDE_Y_POSITION = PositionY+ 25  # 抓取滑块的中心

后面的写法就是,抓住按钮的位置(SLIDE_X_POSITION ,SLIDE_Y_POSITION ),然后拖动红色箭头的长度,就可以完成拖拽的过程了!

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值