解决python selenium Action模拟拖拽无效

采用物理模式鼠标操作的解决方法

1. 首先通过 pip install pypiwin32导入包
2. 测试代码

import win32api, win32con
      # 移动到某点坐标
    	  win32api.SetCursorPos((782, 355))
    	  time.sleep(0.5)
    	  win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 782, 355)
          time.sleep(0.5)
          win32api.mouse_event(win32con.MOUSEEVENTF_MOVE, 300, 0)
          time.sleep(1)
          win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0)

3. 函数介绍

mouse_event: 该函数综合鼠标击键和鼠标动作
VOID mouse_event(
DWORD dwFlags,
DWORD dx,
DWORD dy,
DWORD dwData,
DWORD dwExtraInfo
);
dwFlags : 下表中标志之一或它们的组合
dx,dy: 根据MOUSEEVENTF_ABSOLUTE标志,指定x,y方向的绝对位置或相对位置 。如果没有使用MOUSEEVENTF_ABSOLUTE,函数默认的是相对于鼠标当前位置的点,如果dx,和dy,用0,0表示,这函数认为是当前鼠标所在的点。

鼠标动作:
MOUSEEVENTF_MOVE: 表明发生移动。
MOUSEEVENTF_LEFTDOWN: 表明接按下鼠标左键。
MOUSEEVENTF_LEFTUP: 表明松开鼠标左键。
MOUSEEVENTF_ABSOLUTE: 表明参数dX,dy含有规范化的绝对坐标。
MOUSEEVENTF_RIGHTDOWN: 表明按下鼠标右键。
MOUSEEVENTF_RIGHTUP: 表明松开鼠标右键。
MOUSEEVENTF_MIDDLEDOWN: 表明按下鼠标中键。
MOUSEEVENTF_MIDDLEUP: 表明松开鼠标中键。
MOUSEEVENTF_WHEEL: 在Windows NT中如果鼠标有一个轮,表明鼠标轮被移动。移动的数量由dwData给出。

4. mouse_event使用举例
1) 使用绝对坐标
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 500, 500)
2) 鼠标左键按下和松开两个事件的组合即一次单击
mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0)

原文地址:https://www.cnblogs.com/wangjunjiehome/p/14108118.html