selenium iframe切换
在做web自动化的过程中会遇到一些弹出的登录页面,定位后,执行程序发现还是出现报错,其实定位可能没有问题,而是iframe在作怪
iframe
iframe是HTML标签,作用是文档中的文档,或者浮动的框架(FRAME)。iframe元素会创建包含另外一个文档的内联框架,也就html中在嵌套一个网页
iframe长什么样子
我们通常登录的163邮箱其实就是iframe。可以通过F12查看
如何定位iframe
我们知道什么是iframe了,那么如何定位?我们可以使用selenium中自带的一个方法 switch_to_frame ,这里的定位iframe可以是id属性也可以是name属性
源码
def switch_to_frame(self, frame_reference):
""" Deprecated use driver.switch_to.frame
"""
warnings.warn("use driver.switch_to.frame instead",
DeprecationWarning, stacklevel=2)
self._switch_to.frame(frame_reference)
小试牛刀
方法一:
这里安静通过switch_to_frame方法进行定位,这里的iframe的ID为动态id,每次启动都不通,使用正则表达式抓取
from selenium import webdriver
import time
import re
driver = webdriver.Chrome()
driver.get('https://mail.163.com/')
# 获取页面HTML
html = driver.page_source
# 找到iframe的id,这里iframe是动态的
r = re.findall(r'