1.简介
通过前边三篇的学习,想必大家已经对iframe有了一定的认识和了解,今天这一篇主要是对iframe的一些特殊情况的介绍和讲解,主要从iframe的定位、监听事件和执行js脚本三个方面进行展开介绍。
2.iframe定位
2.1动态id属性如何定位
有时候,我们可能看到的iframe 的id不是固定的,是动态的一个id, 每次刷新,它的值都不一样(一般前面一部分是固定的),而且它的刚好又没有name属性。例如:宏哥前边讲解的163邮箱的iframe的id就是动态的。如下图所示:
像上图所示的这种动态的id,如何定位了,宏哥在这里讲解两种比较常用的方法,当然了可能有比宏哥更好的方法,欢迎留言讨论。
2.2.1第一种方法
可以用css的正则匹配元素属性
语法 |
描述 |
|
匹配 name 以 value 开头的元素 |
|
匹配 name 以 end 结尾的元素 |
|
匹配class属性包含text的元素 |
参考代码:
# css 正则匹配属性 frame = page.frame_locator('[id^="x-URS-iframe"]') print(frame) frame.locator('#username').fill('北京-宏哥')
2.2.2第二种方法
使用xpath的contains 包含属性。参考代码:
# xpath的contains 包含属性 frame = page.frame_locator('//*[contains(@id, "x-URS-iframe")]') print(frame) frame.locator('#username').fill('北京-宏哥')
2.2两层iframe如何定位
两层iframe,顾名思义是:iframe下嵌套另外一个iframe。解决办法没什么技巧,一层一层定位即可。多层也是类似的方法。例如:宏哥前边讲解的QQ邮箱的iframe就有个2层的iframe。如下图所示:
#一层一层定位定位frame frame = page.frame_locator('[class="QQMailSdkTool_login_loginBox_qq_iframe"]').frame_locator("#ptlogin_iframe") #点击密码登录 frame.locator("#switcher_plogin").click() frame.locator('#u').fill('北京-宏哥') frame.locator('#p').fill("123456") frame.locator('#login_button').click()
3.监听事件
iframe的事件可以通过page对象直接监听到。如下图所示:
3.1代码设计
其它的下载事件,文件上传监听方法都类似一样。
3.2参考代码
# coding=utf-8 标签:代码,Playwright,宏哥,Python,frame,初窥篇,playwright,iframe,page From: https://www.cnblogs.com/du-hong/p/17616504.html