首页 > 编程语言 >python+playwright 学习-4.操作iframe

python+playwright 学习-4.操作iframe

时间:2023-02-21 14:45:55浏览次数:35  
标签:playwright python frame click locator iframe page

前言

iframe 是web自动化里面一个比较头疼的场景,在Selenium中处理 iframe 需要切换来切换去非常麻烦。
在playwright中,让其变得非常简单,我们在使用中无需切换iframe,直接定位元素即可。

iframe 定位

可以使用page.frame_locator()或locator.frame_locator()方法创建 FrameLocator 捕获足该 iframe 中检索和定位元素。

使用示例一:

locator = page.frame_locator("my-frame").get_by_text("Submit")
locator.click()

使用frame_locator() 定位到iframe上,然后继续在上面使用locator方法定位元素

iframe 定位器是严格的。这意味着如果有多个元素与给定的选择器匹配,则对 iframe 定位器的所有操作都会抛出异常。

# Throws if there are several frames in DOM:
page.frame_locator('.result-frame').get_by_role('button').click()

# Works because we explicitly tell locator to pick the first frame:
page.frame_locator('.result-frame').first.get_by_role('button').click()

以下代码段在带有 id 的 iframe 中定位带有文本“提交”的元素my-frame,例如<iframe id="my-frame">

locator = frame.frame_locator("#my-iframe").get_by_text("Submit")
locator.click()

以163 邮箱为例

由于iframe 元素 id 属性是动态可变的id="x-URS-iframe1676960382133.3657" 可以使用xpath的contains 模糊匹配,或者css的正则匹配

from playwright.sync_api import sync_playwright


with sync_playwright() as p:
    browser = p.chromium.launch(headless=False, slow_mo=1000)
    page = browser.new_page()
    page.goto("https://mail.163.com/")

    # 操作 iframe 上的元素
    # frame = page.frame_locator("iframe[id^=x-URS-iframe]")
    # xpath 模糊匹配
    frame = page.frame_locator('//iframe[contains(@id, "x-URS-iframe")]')
    frame.locator('[name="email"]').fill('yoyoketang')
    frame.locator('[name="password"]').fill("123456")
    frame.locator('#dologin').click()

    page.wait_for_timeout(5000)
    browser.close()

当定位到有多个时候, last 将定位器返回到最后一个

frame_locator().last

first 匹配第一个

frame_locator().first

还可以使用index索引

frame_locator().nth(index)

frame() 定位方法

还有一种frame() 定位方法 ,可以根据name属性和url属性匹配

frame = page.frame(name="frame-name")
frame = page.frame(url=r".*domain.*")
# Interact with the frame
frame.fill('#username-input', 'John')

page.frame 和 page.frame_locator 使用差异

page.frame_locator('') 返回的对象只能用locator() 方法定位元素然后click()等操作元素
page.frame() 返回的对象能直接使用fill() 和 click() 方法

标签:playwright,python,frame,click,locator,iframe,page
From: https://www.cnblogs.com/yoyoketang/p/17140967.html

相关文章

  • Python+uiautomator2写安卓手机脚本前期准备
    1.安装adb网上找一个或者FQ后官网下,然后配置环境变量即可C:\Users\lenovo>adbversionAndroidDebugBridgeversion1.0.39Revision3db08f2c6889-androidInstal......
  • 基于UIAutomation+Python+Unittest+Beautifulreport的WindowsGUI自动化测试框架common
    1框架工具说明工具说明使用Unittest框架开源自动化测试框架,直接使用批量或指定用例运行Unittest框架可支持此功能log日志使用Python的logging库即可......
  • Python列表与元组
    1.列表的格式列表也是一个容器是可变数据类型[数据1,数据2,数据3,数据4,......]列表可以存储多个不同类型的数据2.列表基础操作列表是一个可变数据类型,所执行的操......
  • #Python 缺失值的检测与处理,检测部分
    Python 缺失值的检测与处理,分两部分笔记,第一部分是检测缺失值部分        ......
  • python+playwright 学习-3.页面操作Action
    前言Playwright可以与HTML输入元素交互,例如文本输入、复选框、单选按钮、选择选项、鼠标单击、键入字符、键和快捷方式以及上传文件和焦点元素。fill()输入文字使用......
  • Python 学习记录
    前言Python3.5安装步骤Python官网Pycharm第一个程序.pyprint("hellopython")基本语法type(a)=数据类型整数(在线进制转换)定义a=12Python可以......
  • Excel文件 利用MySQL/Python 实现自动处理数据的功能
    目录问题描述:解决方案:一、SQL查询二、SQL、python处理三、python处理四、优化python处理1.手动执行代码2.开机自动执行代码对比四种方案:总结:问题描述:在没有服务器存储数......
  • python+playwright 学习-2.Selector 选择器定位元素
    前言Selector选择器,也就是通常说的元素定位了,页面上点点点的操作,都是基于元素定位,所以这块是重点需要学的核心内容。Selector选择器说到元素定位,大家肯定会首先想到s......
  • python super()
    还未看:​​https://www.runoob.com/w3cnote/python-super-detail-intro.html​​参考文章:​​https://www.runoob.com/python/python-func-super.html​​......
  • 02Python输入输出
    输入输出print()函数sep=''数据之间一空格分割,默认是空格end='\n'在打印后会额外的加一个数据,默认是换行符print("hello","world") print("hello","worl......