selenium---表单切换(iframe)

  在做web自动化的过程中会遇到一些弹出的登录页面,定位后,执行程序发现还是出现报错,其实定位可能没有问题,而是表单再作怪,也就是iframe

iframe

iframe是HTML标签,作用是文档中的文档,或者浮动的框架(FRAME)。iframe元素会创建包含另外一个文档的内联框架,也就html中在嵌套一个网页

iframe长什么样子

我们通常登录的163邮箱其实就是iframe。可以通过F12查看

selenium---表单切换(iframe)_第1张图片

如何定位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_frane方法进行定位,这里的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'