pyautogui 配合 selenium 实现桌面坐标系定位元素坐标,模拟真实鼠标行为

pyautogui 配合 selenium 实现桌面坐标系定位元素坐标,模拟真实鼠标行为。

场景:当我需要点击某个元素,或者触发浏览器的自动填充账号密码时,自动化点击无效。但是想要模拟真实鼠标点击又需要元素的坐标通过pyautogui来实现。通过selenium node.location获取的坐标是相当于浏览器实际内容窗口的坐标系,不能满足pyautogui 直接去自动化操作。这时可以通过浏览器js 获取菜单等实际边框大小计算出 实际的node.location零点位置相对于桌面坐标的坐标系,从而得出元素在桌面坐标系的位置。这样不管怎么操作一般都不会相差太多。
注:未考虑滑动条存在的情况
代码如下:

def get_node_position(driver, node):
    """
    获取元素相对于window窗口上的绝对坐标
    :param driver: 浏览器自动化对象
    :param node: 定位到的元素对象
    :return: 
    """
    window_rect = driver.get_window_rect()
    menu = driver.execute_script("return window.outerHeight - window.innerHeight")
    border = driver.execute_script("return window.outerWidth -  window.innerWidth")
    origin_y = window_rect['y'] + menu - (border / 2)
    origin_x = window_rect['x'] + (border / 2)
    return {"x":node.location['x']+origin_x,"y":node.location['y']+origin_y}
// pyautogui 左键点击
import pyautogui as gui
gui.click(100, 100)

你可能感兴趣的:(selenium)