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

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

python-selenium-框架定位的处理frame_第1张图片

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

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

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

你可能感兴趣的:(selenium,测试工具)