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()

  运行结果:

 

  

posted @ 2022-01-23 16:32  Sunshine_y  阅读(91)  评论(0编辑  收藏  举报