selenium使用location定位元素坐标偏差

selenium使用location定位元素坐标偏差

网上的解决方案:
python+selenium+Chromedriver使用location定位元素坐标偏差
使用xpath定位元素,用.location获取坐标值,截取网页截图的一部分出现偏差。

之所以会出现这个坐标偏差是因为windows系统下电脑设置的显示缩放比例造成的,location获取的坐标是按显示100%时得到的坐标,而截图所使用的坐标却是需要根据显示缩放比例缩放后对应的图片所确定的,因此就出现了偏差。
解决这个问题有三种方法:
1.修改电脑显示设置为100%。这是最简单的方法;
2.缩放截取到的页面图片,即将截图的size缩放为宽和高都除以缩放比例后的大小;
3.修改Image.crop的参数,将参数元组的四个值都乘以缩放比例。

第一种我试了,就是将我本身的缩放由125%改为100%,虽然能够定位准确了,但是我整个人都不好了,我接受不了

第二种,我没理解什么意思。

最后我用的第三种,因为我的电脑缩放比例是125%,所以每个值乘以1.25:

img_code_tag = bro.find_element_by_xpath('//*[@id="loginForm"]/div/ul[2]/li[4]/div/div/div[3]/img')
# location 获取元素坐标
time.sleep(3)
location = img_code_tag.location  # {'x': 276, 'y': 274}
size = img_code_tag.size  # {'height': 190, 'width': 293}

# 进行裁剪的范围
k = 1.25
rangle = (location['x']*k, location['y']*k, location['x']*k+size['width']*k, location['y']*k+size['height']*k)
print(rangle)  # (345.0, 342.5, 711.25, 580.0)

i = Image.open('main.png')  # 打开之前截的图片
frame = i.crop(rangle)  # 按范围裁剪
frame.save('code.png')  # 保存裁剪后的图片

win10缩放比例修改:桌面右键 - 显示设置 - 缩放与布局

posted @ 2020-08-30 18:22  养了只猪  阅读(2247)  评论(1编辑  收藏  举报