Python+selenium 自动化高级应用篇:借助pyautogui实现web前端带轨迹拖拽功能,解决ActionChains拖拽失效问题

2020-09-24 10:00:38 浏览数 (1)

有一些 web 前端的交互,必须有鼠标轨迹才能成功的实现拖拽功能。 而 selenium 自带的 ActionChains 方法,是一瞬间从 A 点到 B 点的。 解决思路:

利用元素返回的相对浏览器的位置的方法, location[] 可以返回元素的坐标,再加上边框的位移量,确定好元素相对于电脑的位置,这个时候用浏览器最大化方法很有必要 driver.maximize_window(),可以固定浏览器相对于电脑位置的偏移量,这个偏移量需要大家自己来找,再利用 pyautogui 模拟鼠标操作完美的解决问题,鼠标操作实现电脑坐标点到点的轨迹拖动,后面的 duration 可以设置拖动时长。

代码语言:javascript复制
# 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)

效果如演示:

0 人点赞