python-selenium-框架定位的处理frame

Frame框架是Html框架结构中一种布局格式,共有三种形式:frameset、frame、iframe

frame是整个页面的框架,iframe是内嵌的网页元素,也可以说是内嵌的框架

页面比较复杂,页面套页面,定位第几层窗口,找元素时,要先看元素在哪个框架,找到框架在定位元素。
框架也是某一个具体页面的元素

一般进入iframe

switch_to.frame(frame_reference):切换iframe框架的方法,参数frame_reference
是用于定位iframe,可以传ID,NAME等,还可以传递一个webElement对象
1:
 driver.switch_to.frame(driver.find_element(By.XPATH,'//*[@id="g_iframe"]'))

2:
driver.switch_to.frame(x)#x:数frame一共有多少个,填写下标,从零开始
3:
#通过id定位
driver.switch_to.frame("g_iframe")

退出/释放iframe    注意:在进入ifarme框架里面后,操作完成需要跳出ifarme框架

driver.switch_to_frame(iframe_element) #切换至iframe

driver.switch_to.default_content() #切回主页面

driver.switch_to_parent_frame() #切回上级iframe

遇到了所要定为的元素在框架里面,必须先进入元素所在的框架里面,否则不能直接定位元素

 看到我们要的东西,发现不进入框架里面无法直接拿到了想要的东西

一层一层的收发下,需要的东西在一个框架里面,所有我们需要进去框架,然后定位元素

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
from selenium.webdriver.chrome.options import Options
#取消浏览器中的自动化程序正在控制浏览器
opt = Options()
opt.add_experimental_option('excludeSwitches',['enable-automation'])
try:
    # 1:打开浏览器
    driver = webdriver.Chrome(options=opt)
    # 2:输入你的网站
    driver.get('https://music.163.com/#/playlist?id=2075587022')
    driver.implicitly_wait(30)
    #进入框架
    driver.switch_to.frame(driver.find_element(By.XPATH,'//*[@id="g_iframe"]'))
    asd=driver.find_element(By.XPATH,'/html/body/div[3]/div[1]/div/div/div[3]/div/div[2]/div[2]/div[1]/div[2]/div[1]/div').text#copy完整的xpath
    print(asd)
    #退出框架
    driver.switch_to.default_content() # 切回主页面
    print(driver.page_source)

except Exception as E:
    print(E)
finally:
    driver.quit()

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
from selenium.webdriver.chrome.options import Options
#取消浏览器中的自动化程序正在控制浏览器
opt = Options()
opt.add_experimental_option('excludeSwitches',['enable-automation'])
try:
    # 1:打开浏览器
    driver = webdriver.Chrome(options=opt)
    # 2:输入你的网站
    driver.get('https://music.163.com/#/playlist?id=2075587022')
    driver.implicitly_wait(30)
    #进入框架
    driver.switch_to.frame(driver.find_element(By.XPATH,'//*[@id="g_iframe"]'))
    asd=driver.find_elements(By.XPATH,'/html/body/div[3]/div[1]/div/div/div[3]/div/div[2]/div[2]/div')
    for i in asd:
        print(i.text)
    
    #退出框架

except Exception as E:
    print(E)
finally:
    driver.quit()

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值