有一些 web 前端的交互,必须有鼠标轨迹才能成功的实现拖拽功能。
而 selenium 自带的 ActionChains 方法,是一瞬间从 A 点到 B 点的。
解决思路:
利用元素返回的相对浏览器的位置的方法, location[] 可以返回元素的坐标,再加上边框的位移量,确定好元素相对于电脑的位置,这个时候用浏览器最大化方法很有必要 driver.maximize_window(),可以固定浏览器相对于电脑位置的偏移量,这个偏移量需要大家自己来找,再利用 pyautogui 模拟鼠标操作完美的解决问题,鼠标操作实现电脑坐标点到点的轨迹拖动,后面的 duration 可以设置拖动时长。
# 2019.10.10 # 小蓝枣 # 实现带轨迹拖拽功能 # -*- coding: UTF8 -*- from selenium import webdriver import os import time import pyautogui driver = webdriver.Chrome() # 打开谷歌浏览器 driver.maximize_window() # 最大化浏览器 driver.implicitly_wait(10) # 设置隐式时间等待 # 拖拽应用 def drag_app(s): # 定位起始元素 start = driver.find_element_by_xpath('//*[@fieldid="left_area"]//*[@fieldid="搜索结果_group"]//*[@fieldid="'+s+'"]//*[@class="list-item-content"]') # 让鼠标移动到起点元素上 pyautogui.moveTo(start.location['x']+20,start.location['y']+125) # 定位要拖拽到的位置元素 end = driver.find_element_by_xpath('//*[@fieldid="right_area"]//*[@fieldid="分组_group"]//*[@fieldid="container_area"]') # 实现拖拽功能 pyautogui.dragTo(end.location['x']+20,end.location['y']+155,duration=1) time.sleep(2)
效果如演示:
喜欢的点个赞❤吧!