首页 > 编程语言 >python+playwright 学习-28 定位多个元素

python+playwright 学习-28 定位多个元素

时间:2023-03-09 14:25:09浏览次数:37  
标签:playwright locator python get 28 a1 nth checkbox click

前言

我们一般定位到页面上唯一的元素再进行操作,有时候一个元素的属性是一样的,会定位到多个元素

click方法

当定位到页面唯一元素的时候,可以调用click方法

   <div>
           <label>标签:
               <input type="checkbox" id="a1"> 旅游
               <input type="checkbox" id="a2">看书
               <input type="checkbox" id="a3" checked >学习
               <input type="checkbox" id="a4">学python
           </label>
       </div>

如果直接通过id定位到,可以直接调用click 方法

  a1 = page.locator('#a1')
    print(a1)   # <Locator>
    a1.click()

如果通过type="checkbox" 属性定位,会定位到多个元素

a1 = page.locator('[type="checkbox"]')
    print(a1)   # <Locator>
    a1.click()

此时会抛出异常

playwright._impl._api_types.Error: Error: strict mode violation: locator("[type=\"checkbox\"]") resolved to 4 elements:
    1) <input id="a1" type="checkbox"/> aka get_by_label("标签:\n                旅游\n               看书\n               学习\n               学python")
    2) <input id="a2" type="checkbox"/> aka get_by_role("checkbox").nth(1)
    3) <input id="a3" checked type="checkbox"/> aka get_by_role("checkbox").nth(2)
    4) <input id="a4" type="checkbox"/> aka get_by_role("checkbox").nth(3)
=========================== logs ===========================
waiting for locator("[type=\"checkbox\"]")

在异常里面会非常清晰的看到,按给的定位方式有4个元素被定位到,所以不能直接调用click的方法

first 和 last

前面提到如果定位到多个元素,可以用first 和 last 取第一个和最后一个

a1 = page.locator('[type="checkbox"]')
    a1.first.click()  # 点第一个
    a1.last.click()   # 点最后个

nth() 根据索引定位

前面报错的时候会看到画面有 nth() 可以根据索引找到第几个元素

    2) <input id="a2" type="checkbox"/> aka get_by_role("checkbox").nth(1)
    3) <input id="a3" checked type="checkbox"/> aka get_by_role("checkbox").nth(2)
    4) <input id="a4" type="checkbox"/> aka get_by_role("checkbox").nth(3)

使用示例

 a1 = page.locator('[type="checkbox"]')
    a1.nth(0).click()
    a1.nth(3).click()

count 统计个数

使用count 可以统计元素的个数

    a1 = page.locator('[type="checkbox"]')
    print(a1.count())    # 4

标签:playwright,locator,python,get,28,a1,nth,checkbox,click
From: https://www.cnblogs.com/yoyoketang/p/17198224.html

相关文章

  • Python分析嵌入式日志小工具开发
    背景数据可度量,无人可值守,问题早发现功能点关键字分析自动压缩LOG自动发送邮件代码#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time    : 2022/8/2......
  • python不设置环境变量 如何安装第三方库
    电脑安装的python环境有好多个,有的是用conda建立的虚拟环境,有的不是,用conda建立的管理起来没什么好说的,自定义的python环境如果没有设置环境变量,在控制台管理起来就不是那......
  • 实验1 Python开发环境使用和编程初体验
    实验目的:实验任务1:task1-11#print输出的几种用法23#用法1:用于输出单个字符串或单个变量45print('hey,u')678#用法2:用于输出多个数据项,用逗......
  • 实验1 Python开发环境使用和编程初体验
    实验任务1task1-1Python源码1print('hey,u')2print('hey','u')3x,y,z=1,2,34print(x,y,z)1x,y,z=1,2,32print('x=%d,y=%d,z=%d'%(x,y,z)......
  • python+playwright 学习-27 鼠标悬停 hover() 和listitem 定位
    前言鼠标悬停到某个元素上后出现一些选项,这是很常见的操作了,playwright操作鼠标悬停非常简单,只需调用hover()方法。鼠标悬停打开官网https://playwright.dev/鼠标悬......
  • OpenAI/ChatGPT的Python API,关于os.getenv()环境变量设置问题。
    OpenAI官方的pythonapi连接示例中有一行代码openai.api_key=os.getenv("OPENAI_API_KEY")其中的os.getenv()是从环境中获取环境变量,上面代码要获取的就是OP......
  • 使用Python实现简易版Netcat
    NetcatNetcat是一种网络工具,也称为“nc”,可用于在计算机网络之间进行TCP/IP或UDP连接。它可以用于连接到其他计算机上的端口,发送和接收数据,扫描端口以及创建服务器等。使......
  • 实验1 Python开发环境使用和编程初体验
    task1_1:1.print('hey,u')print('hey','u')x,y,z=1,2,3print(x,y,z)print('x=%d,y=%d,z=%d'%(x,y,z))print('x={},y={},z={}'.format(x,y,z))print(f'x={x},y=......
  • Python列表(list)
    Python 列表(List)序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字-它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。Python有6个序列的内置类......
  • Python单例模式
    单例模式(SingletonPattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上......