iframe处理以及动作链的使用
selenium处理iframe
- 如果定位的标签存在于iframe标签之中,则必须使用switch_to.frame(id)
- 动作链(拖动):from selenium.webdriver import ActionChains
- 实例化一个动作链对象:action = ActionChains(bro)
- click_and_hold(div):长按且点击操作
- move_by_offset(x,y)
- perform()让动作链立即执行
- action.release()释放动作链对象
1 # -*- coding:utf-8 -*- 2 # @Time : 2022/1/23 0023 15:48 3 # @Author : Tzy0425 4 # @File : iframe的处理.py 5 6 from selenium import webdriver 7 from selenium.webdriver.chrome.service import Service 8 from selenium.webdriver.common.by import By 9 from time import sleep 10 from selenium.webdriver import ActionChains 11 12 # 实例化一个浏览器对象,传入浏览器驱动程序的路径 13 s = Service(r'./chromedriver.exe') 14 driver = webdriver.Chrome(service=s) 15 driver.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable') 16 sleep(1) 17 18 # 因为iframe标签作用是大页面中有个小页面,直接定位的话定位不到 19 # 所以如果定位的标签是存在于iframe标签之中的,则必须通过如下操作进行标签定位 20 # 切换浏览器标签定位的作用域 21 driver.switch_to.frame('iframeResult') 22 # 标签定位 23 div = driver.find_element(By.ID,'draggable') 24 25 # 标签交互则用到了动作链,需要先导包ActionChains 26 action = ActionChains(driver) 27 # 点击长按指定的标签 28 action.click_and_hold(div) 29 30 for i in range(5): 31 # move_by_offset(x,y),x表示水平偏移,y表示竖直偏移;perform()表示立即执行动作链操作 32 action.move_by_offset(52,5).perform() 33 sleep(0.2) 34 35 sleep(2) 36 # 动作链用完后需要释放 37 action.release() 38 39 driver.quit()
运行结果: