selenium动作链和iframe的处理
selenium处理iframe
iframe可以简单的理解为一个嵌入在主页面中的小页面
如果定位的标签存在于iframe中,则必须使用switch_to.frame(id),参数放frame的id
动作链
动作链指一系列的动作,如拖动。
from selenium.webdriver import AcrionChains
1. 实例化一个动作链对象:action=ActionChains(bro)
2. .click_and_hold(div):长按且点击操作
3. .move_by_offset(x,y): 移动到x或y方向上多少像素
4. perform():让动作链立即执行
5. action.release()释放动作链对象
6. action.move_to_element(div_loa).perform():移动到指定元素位置
代码实例:拖动效果
# 导入selenium模块
from selenium import webdriver
from lxml import etree
from time import sleep
from selenium.webdriver import ActionChains
# 1. 实例化一个浏览器对象
bro=webdriver.Chrome(executable_path=r'C:\Users\Lenovo\PycharmProjects\pythonProject1\venv\爬虫之selenium\chromedriver.exe')
# 2. 发起请求
bro.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
# 3. 切换到iframe中
#切换浏览器标签定位的作用域,参数为iframe的id
bro.switch_to.frame('iframeResult')
# 4. 定位到需要拖动的元素
div=bro.find_element_by_xpath('//*[@id="draggable"]')
# 5. 实例化动作链
action=ActionChains(bro)
# 6. 点击并长按定位到的元素
action.click_and_hold(div)
# 7. 执行移动操作
for i in range(5):
#perform()立即执行动作链操作
#move_by_offset(x,y):x水平方向 y竖直方向
action.move_by_offset(17,0).perform()
sleep(0.3)
# 8. 释放动作链
action.release()
bro.quit()