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

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

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

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

简单的测试用html页面如下:只有一个盒子和一组复选框。
pyautogui.moveTo方法与selenium location属性关于坐标原点位置的探究过程_第1张图片


<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Titletitle>
head>
<body>
    <div id="one" hidden="hidden">1111div>
    <div id="two">2222div>
    <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 pyautogui

class 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+location
        rect = 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)

通过鼠标所在位置可以看出究竟以哪处为原点
前者为未最大化窗口时的鼠标位置
后者为最大化窗口之后的情况
pyautogui.moveTo方法与selenium location属性关于坐标原点位置的探究过程_第2张图片

pyautogui.moveTo方法与selenium location属性关于坐标原点位置的探究过程_第3张图片
2.location属性坐标原点探究
我获取了桃子复选框的rect值,打印出其数据为
{‘height’: 13, ‘width’: 13, ‘x’: 68.734375, ‘y’: 33}
通过截图软件看出:
pyautogui.moveTo方法与selenium location属性关于坐标原点位置的探究过程_第4张图片

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

你可能感兴趣的:(selenium,python)