pyautogui.moveTo方法与selenium location属性关于坐标原点位置的探究过程

本文主要是介绍pyautogui.moveTo方法与selenium location属性关于坐标原点位置的探究过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

准备着手研究简单验证码的识别,需要用到pyAutoGui库。
使用过程中发现moveTo方法直接用location取得的元素的坐标位置不一致,网上的方法说的也很模糊,于是打算自己做个简单的测试。

结论:
moveTo拿到的坐标后,以电脑屏幕的左上角为原点进行定位。
而selenium中的location与rect(rect实际上就是location与size的组合)的坐标是以网页界面左上角为原点。

以下为探究过程与具体图示。
个人探索不一定准确,恳请大佬们指出错误。

简单的测试用html页面如下:只有一个盒子和一组复选框。
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><div id="one" hidden="hidden">1111</div><div id="two">2222</div><form action="" method="get"><label><input name="Fruit" type="checkbox" value="" />苹果 </label><label><input name="Fruit" type="checkbox" value="" />桃子 </label><label><input name="Fruit" type="checkbox" value="" />香蕉 </label><label><input name="Fruit" type="checkbox" value="" /></label></form>
</body>
</html>

完整的python测试代码如下:

from selenium import webdriver
from time import sleep
import os
import pyautoguiclass Addition:def __init__(self):self.driver = webdriver.Chrome()path = 'file:///'+os.path.abspath('Elements.html')self.driver.get(path)# self.driver.maximize_window()sleep(1)def PyAutoGui(self):elem = self.driver.find_element_by_xpath('/html/body/form/label[2]/input')# elem.location是纯位置 elem.rect是size+locationrect = elem.rect#rect是个字典# pyautogui.moveTo(rect['x'], rect['y']+120)# moveTo的坐标系原点是 电脑屏幕的左上角pyautogui.moveTo(20,20)sleep(3)pyautogui.click()# 有没有最大化窗口 元素的坐标值都是一样的print(elem.rect)def last(self):self.driver.quit()if __name__ == '__main__':test = Addition()test.PyAutoGui()test.last()

(对于没办法截图截到鼠标而用拍照展示表示抱歉)

1.moveTo方法定位原点探究
关键代码如下:

self.driver.maximize_window()pyautogui.moveTo(20,20)

通过鼠标所在位置可以看出究竟以哪处为原点
前者为未最大化窗口时的鼠标位置
后者为最大化窗口之后的情况
在这里插入图片描述

在这里插入图片描述
2.location属性坐标原点探究
我获取了桃子复选框的rect值,打印出其数据为
{‘height’: 13, ‘width’: 13, ‘x’: 68.734375, ‘y’: 33}
通过截图软件看出:
在这里插入图片描述

所以要想使moveTo方法可以准确定位到元素,还应该加上竖直方向多出的菜单栏的距离。

这篇关于pyautogui.moveTo方法与selenium location属性关于坐标原点位置的探究过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/233600

相关文章

将Mybatis升级为Mybatis-Plus的详细过程

《将Mybatis升级为Mybatis-Plus的详细过程》本文详细介绍了在若依管理系统(v3.8.8)中将MyBatis升级为MyBatis-Plus的过程,旨在提升开发效率,通过本文,开发者可实现... 目录说明流程增加依赖修改配置文件注释掉MyBATisConfig里面的Bean代码生成使用IDEA生

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

macOS无效Launchpad图标轻松删除的4 种实用方法

《macOS无效Launchpad图标轻松删除的4种实用方法》mac中不在appstore上下载的应用经常在删除后它的图标还残留在launchpad中,并且长按图标也不会出现删除符号,下面解决这个问... 在 MACOS 上,Launchpad(也就是「启动台」)是一个便捷的 App 启动工具。但有时候,应

JSON Web Token在登陆中的使用过程

《JSONWebToken在登陆中的使用过程》:本文主要介绍JSONWebToken在登陆中的使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录JWT 介绍微服务架构中的 JWT 使用结合微服务网关的 JWT 验证1. 用户登录,生成 JWT2. 自定义过滤

SpringBoot日志配置SLF4J和Logback的方法实现

《SpringBoot日志配置SLF4J和Logback的方法实现》日志记录是不可或缺的一部分,本文主要介绍了SpringBoot日志配置SLF4J和Logback的方法实现,文中通过示例代码介绍的非... 目录一、前言二、案例一:初识日志三、案例二:使用Lombok输出日志四、案例三:配置Logback一

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很