1.selenium处理 iframe

一张页面当中可以嵌套一张子页面,可是通过iframe标签实现子页面的嵌套
https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable

iframe标签中的标签定位和一般的网页标签定位的区别是:
一般的网页标签定位:driver.find_element_by_id('XXX')
iframe标签中的标签定位:
driver.switch_to.frame('AAA')
driver.find_element_by_id('XXX')

备注:仅仅是添加了switch_to.frame()实现iframe()标签中的标签定位

2.动作链

动作链【拖动】使用场景:网页用户登录时的滑块验证(也是一种验证方式)
步骤如下:

step1:导包 from selenium.webdriver import ActionChains
step2:实例化动作链 action = ActionChains(driver)
step3:点击并长按动作链 ActionChains.click_and_holds(定位的拖动标签)
step4:滑块移动 ActionChains.move_to_offset(x,y)
step5:执行滑动操作  .perform()
step6:释放动作链对象 action.release()

3.综合案例

from selenium import webdriver
from time import sleep
#导入动作链对应的类
from selenium.webdriver import ActionChains
#1.获取浏览器对象
driver = webdriver.Chrome('./chromedriver.exe')

#2.通过该浏览器发送url请求
driver.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')

#3.定位标签     如果是整页的数据,则page_text = driver.page_source,但是这里还是要继续解析页面信息
#如果定位的标签存在于iframe标签之中,则必须使用switch_to.frame(id)
driver.switch_to.frame('iframeResult')     #driver.switch_to.frame(id)
div = driver.find_element_by_id('draggable')

#动作链:动作链其实就是拖动【如会员登录的时候,会出现滑块移动】
#   1.import selenium.webdriver from ActionChains
#   2.action = ActionChains(driver)
#   3.点击且长按需要拖动的标签:action.click_and_hold(标签)
#   4.标签拖动【是根据像素进行拖动】,使用move_by_offset(x,y)
#   5.perfor.() 让动作立即执行;  #标签移动的像素确定好以后,使用.perform()执行移动的像素
#   6.释放动作链对象 action.release()
action = ActionChains(driver)
#点击长按指定的标签
action.click_and_hold(div)

for i in range(5):
    action.move_by_offset(17,0).perform()
    sleep(0.5)

#释放动作链对象
action.release()

#关闭
driver.quit()
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐