6_4 行为链

    在上面的实例中,一些交互动作都是针对某个节点执行的。比如,对于输入框,我们就调用它的输入文字和清空文字方法;对于按钮,就调用它的点击方法。其实,还有另外一些操作,它们没有特定的执行对象,比如鼠标拖曳、键盘按键等,这些动作用另一种方式来执行,那就是动作链。

 1 """行为链"""
 2 
 3 from selenium import webdriver
 4 from selenium.webdriver.common.action_chains import ActionChains
 5 
 6 driver_path = r"D:installchromedriverchromedriver.exe"
 7 driver = webdriver.Chrome(executable_path = driver_path)
 8 driver.get('https://www.baidu.com/')
 9 
10 intputTag = driver.find_element_by_id('kw')
11 submitBtn = driver.find_element_by_id('su')
12 
13 actions = ActionChains(driver)
14 actions.move_to_element(intputTag)
15 actions.send_keys_to_element(intputTag, 'python')
16 actions.move_to_element(submitBtn)
17 actions.click(submitBtn)
18 actions.perform()

比如,现在实现一个节点的拖曳操作,将某个节点从一处拖曳到另外一处,可以这样实现:

from selenium import webdriver
from selenium.webdriver import ActionChains
from time import sleep


# 创建一个浏览器对象
bro = webdriver.Chrome(executable_path="chromedriver.exe")
# 发起url请求
bro.get("https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable")

# 定位的标签是存在于iframe的子页面中,如果直接使用find做定位,是定位不到的
# 定位iframe中标签操作
# 第一步:定位到iframe标签位置
bro.switch_to.frame("iframeResult")
# 第二步:通过ID定位到需要拖动的标签
target_ele = bro.find_element_by_id("draggable")


# 创建一个拖动对象
action = ActionChains(bro)
# 点击拖动对象并长按保持
action.click_and_hold(target_ele)

# 模拟拖动5次,每次拖动17个像素点
for i in range(5):
    # 执行拖动动作
    action.move_by_offset(17, 0).perform()
    # 每拖动17像素暂停5秒
    sleep(2)

# 释放拖动对象句柄
action.release()

sleep(2)
# 关闭浏览器
bro.quit()
原文地址:https://www.cnblogs.com/sruzzg/p/13170466.html