链接:https://pan.baidu.com/s/1XouKF1xfsGqTc2oDzQbYqQ
提取码:t4ac
复制这段内容后打开百度网盘手机App,操作更方便哦
首先我们弄懂什么是iframe
百度百科的回答是:
IFRAME是HTML标签,作用是文档中的文档,或者浮动的框架(FRAME)。iframe元素会创建包含另外一个文档的内联框架(即行内框架)
我把它简单理解为html内嵌的一个大型页面。怎么知道他是iframe还是弹框呢。我们可以在elements的html查看iframe的标签。
我们找到标签后如何定位找到iframe呢
我们有以下三种方式:
1)通过下标,是第五个,根据索引是索引4,索引从0开始
frame(4)
2)通过name
driver.switch_to.frame("login_frame_qq")
3)xpath查找
driver.switch_to.frame(driver.find_element_by_xpath('//iframe[@name="login_frame_qq"]'))
driver.switch_to.frame(driver.find_element_by_xpath(//*[@id="qr_area"]/span[1]))
思路
1)引入包
import time
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
进入浏览器
# 先引入包
from selenium import webdriver
#开启会话
driver = webdriver.Chrome()
2)打开腾讯课堂,定位登录元素://*[@id="js_login"],并点击登录
driver.get('腾讯课堂_专业的在线教育平台(ke.qq.com)')
我们需要打开网站腾讯课堂,定位登录并点击登录,定位元素://*[@id="js_login
WebDriverWait(driver,20,1).until(EC.visibility_of_element_located((By.XPATH,'//*[@id="js_login"]')))
driver.find_element_by_xpath('//*[@id="js_login"]').click()
登陆之后选择qq登录,定位qq登录并点击
点击qq登录,定位元素xpath :/html/body/div[3]/div/div[2]/div[2]/a[1]
WebDriverWait(driver,20,1).until(EC.visibility_of_element_located((By.XPATH,'/html/body/div[3]/div/div[2]/div[2]/a[1]')))
driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div[2]/a[1]').click()
3)点击登录我们需要定位到iframe进行切换,以下三种任选其一
# driver.switch_to.frame(4)
# driver.switch_to.frame("login_frame_qq")
driver.switch_to.frame(driver.find_element_by_xpath('//iframe[@name="login_frame_qq"]'))
4)退出iframe,回到默认的html页面
driver.switch_to.default_content()
#关闭浏览器
time.sleep(10)
driver.quit()
第二种切换方式利用ec模块的数据,这种更稳定
# 方法二
WebDriverWait(driver,20).until(EC.frame_to_be_available_and_switch_to_it("login_frame_qq"))