【Playwright学习笔记 07】其它用户视觉定位的方法

下面的这4种定位,也属于根据用户视觉上的内容定位。

可以通过代码助手产生,其实也完全可以用 css selector 定位替代,了解即可。

根据 元素 placeholder 定位

input 元素,通常都有 placeholder 属性,

可以使用 Page/Locator 对象的 get_by_placeholder 方法,根据 placeholder 属性值定位。

比如

html 复制代码
<input type="text" placeholder="captcha" />

就可以这样定位

python 复制代码
page.get_by_placeholder('captcha',exact=True).fill('白月黑羽')

参数 exact 值为 True ,表示完全匹配,且区分大小写。如果值为False,就只需包含参数字符串即可,且不区分大小写。

作用类似get_by_role 里面的 exact 参数

根据 元素关联的 label 定位

input 元素,通常都有关联的 label

可以使用 Page/Locator 对象的 get_by_label 方法,根据 元素关联的 label 定位。

比如

html 复制代码
  <input aria-label="Username">
  <label for="password-input">Password:</label>
  <input id="password-input">

就可以这样定位

python 复制代码
page.get_by_label("Username").fill("john")
page.get_by_label("Password").fill("secret")

有些元素,比如 img 元素,通常都有 alt 属性

可以使用 Page/Locator 对象的 get_by_alt_text 方法,根据 元素的 alt 属性值 定位

比如

html 复制代码
<img 
  src="https://doc.qt.io/qtforpython/_images/windows-pushbutton.png" 
  alt="qt-button">

就可以这样定位

python 复制代码
href = page.get_by_alt_text("qt-button").get_attribute('src')
print(href)

get_by_alt_text 也有 exact 参数,作用和 get_by_placeholder 里面的 exact 参数 一样。

根据 元素 title 定位

有些元素,比如 span, a 等等,可能有 title 属性,当鼠标悬浮在该元素上时,可以显示title属性内在一个提示框里面

可以使用 Page/Locator 对象的 get_by_title 方法,根据 元素的 title 属性值 定位

比如

html 复制代码
  <a href="https://www.byhy.net" title="byhy首页">白月黑羽教程</a>

就可以这样定位

python 复制代码
page.get_by_title("byhy首页").click()

缺省等待时间

Playwright 中,当我们定位元素(比如 通过locator/get_by_text 等方法)后,对元素进行操作(比如 click, fill),

如果当时根据定位条件,找不到这个元素, Playwright并不会立即抛出错误, 而是缺省等待元素时间为30秒,在30秒内如果元素出现了,就立即操作成功返回。

python 复制代码
from playwright.sync_api import sync_playwright

p = sync_playwright().start()
browser = p.chromium.launch(headless=False)
page = browser.new_page()
page.goto("https://www.byhy.net/cdn2/files/selenium/stock1.html")
page.locator('#kw').fill('通讯\n')
page.locator('#go').click()
element = page.locator("[id='1']")

print(element.inner_text())

如果我们修改下面的代码

python 复制代码
print(element.inner_text())

改为

python 复制代码
print(element.inner_text(timeout=10 ))

表示等待元素出现时长修改为10毫秒,再运行,就会有错误了。

如果,我们想修改 缺省 等待时间, 可以使用 BrowserContext 对象, 如下

python 复制代码
from playwright.sync_api import sync_playwright
p = sync_playwright().start()

browser = p.chromium.launch(headless=False, slow_mo=50)

context = browser.new_context()
context.set_default_timeout(10) #修改缺省等待时间为10毫秒
page = context.new_page() # 通过context 创建Page对象

page.goto("https://www.byhy.net/cdn2/files/selenium/stock1.html")
page.locator('#kw').fill('通讯\n')
page.locator('#go').click()

element = page.locator("[id='1']")
print(element.inner_text())
相关推荐
zhangrelay5 小时前
新版|-|单片机原理与接口技术-2026持续改进优化-从MEGA2560-ESP32与Wokwi到ROS2-Lyrical与具身智能栈
笔记·单片机·嵌入式硬件·学习
Jimmy5 小时前
深夜突袭:我们的午夜战场
笔记·产品·电子书
志尊宝7 小时前
AI原生前端开发(025):端侧AI实战项目:智能笔记助手
人工智能·笔记·ai-native
lll23526917798 小时前
线下多人发言对比与录音操作
笔记·智能手机
叼烟扛炮8 小时前
Linux 学习笔记(三十三):线程互斥——互斥锁(Mutex)与死锁
linux·运维·服务器·笔记·学习·1024程序员节
m4Rk_10 小时前
【论文阅读】Agent 记忆机制(113):Agentic Memory Management——从“检索相关信息”走向“管理 Agent 内部记忆”
论文阅读·人工智能·学习·开源·github
深圳老胡11 小时前
STM32C5A3ZG 网络调试总结:从启动失败到连续 Ping 稳定
笔记·stm32·单片机·代码规范
辣知11 小时前
辣知·化智92 《山海经》里的史前密码
学习
职豚求职小程序刷题11 小时前
宁德时代社招高岗晋升测评笔试改版了
笔记
CarIise11 小时前
JDBC 与数据库事务核心
数据库·笔记