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()
版权归原作者 菜鸟-01 所有, 如有侵权,请联系我们删除。