PlayWright -元素节点操作

元素操作

获取元素信息

locator.inner_html()  #获取某个元素的HTML
locator.text_content() #用来获取某个元素内所有文本内容,包含子元素内容,隐藏元素也能获取。返回值不会被格式化,返回值依赖于代码的内容
locator.inner_text()    #的返回值会被格式化,inner_text()返回的值, 依赖于页面的显示, 
locator.count()  #获取元素个数
all_inner_texts() 和 all_text_contents()  #也是用于获取页面上的文本,但是返回的是list列表

输入

  • locator.fill() 是填写表单字段的最简单方法。它聚焦元素并input使用输入的文本触发事件。它适用于<input>,<textarea>[contenteditable]元素。这可能会导致意外行为。
  • Type 输入:一个字符一个字符地输入字段,就好像它是一个使用locator.type()的真实键盘的用户。此方法将发出所有必要的键盘事件,所有keydown, keyup,keypress事件就位。您甚至可以指定delay按键之间的可选操作来模拟真实的用户行为。 大多数时候,page.fill()会正常工作
# Text 文本框输入
page.get_by_role("textbox").fill("Peter")

# 根据label 定位 Date 日期输入
page.get_by_label("Birth date").fill("2020-02-02")

# Time input
page.get_by_label("Appointment time").fill("13:15")

# Local datetime input
page.get_by_label("Local time").fill("2020-03-02T05:15")


page.locator('#area').type('Hello World!')

点击元素


# 定位可见元素
page.click("button:visible")
page
### 使用Playwright操作元素以获取数据 为了使用Playwright有效地从网页上提取所需的数据,可以利用其强大的选择器机制来定位并读取页面上的各种元素。当提到点击按钮的操作时,通过前缀`text=`到要查找的字符串,Playwright能够找到包含该字符串的元素并执行点击动作;同时,在目标元素尚未渲染的情况下,它会等待直到元素可见再进行交互[^1]。 对于更复杂的情况,比如处理动态加载的内容,Playwright同样表现出色。由于这类内容通常由JavaScript生成,静态解析库如requests或BeautifulSoup无法直接访问这些信息。而借助于Playwright这样的工具,则可轻松应对这种挑战,确保即使是在异步加载后的DOM结构中也能准确定位所需的HTML节点[^2]。 具体来说,如果想要获取某个特定元素内的文本或其他属性值,可以通过如下方式实现: ```javascript // 假设我们要获取一个具有唯一ID 'target-element' 的div标签中的文本内容 const textContent = await page.$eval('#target-element', el => el.textContent); console.log(textContent); ``` 上述代码片段展示了如何运用`$eval()`方法结合CSS选择器选取指定元素,并调用浏览器环境下的原生API(此处为`textContent`)取得相应数据。此过程不仅限于简单的文本检索,还可以扩展至其他类型的属性或者计算样式等更多场景下。 另外值得注意的是,除了基本的选择器外,Playwright还支持XPath表达式以及其他高级特性用于更加精准地匹配复杂的文档对象模型(DOM)路径。这使得开发者可以根据实际需求灵活调整抓取策略,从而提高自动化脚本的成功率和效率。 #### 获取表格数据的例子 考虑到某些应用可能涉及大量结构化数据展示的需求,例如表格形式呈现的信息列表。此时,Playwright也可以很好地胜任此类任务。下面给出一段示范性的Python代码用来遍历表格各行并将每列的数据收集起来: ```python import asyncio from playwright.async_api import async_playwright async def main(): async with async_playwright() as p: browser = await p.chromium.launch() page = await browser.new_page() await page.goto('https://example.com/table-page') rows = [] cells_in_row = [] # 遍历每一行tr元素 tr_elements = await page.query_selector_all('table tbody tr') for row in tr_elements: td_elements = await row.query_selector_all('td') # 查找当前行所有的单元格 for cell in td_elements: value = await cell.text_content() # 提取每个单元格的文字内容 cells_in_row.append(value) rows.append(cells_in_row.copy()) # 将一行记录加入最终结果集中 cells_in_row.clear() print(rows) await browser.close() # 运行main函数 if __name__ == '__main__': asyncio.run(main()) ``` 这段程序首先启动了一个无头模式下的Chromium实例,并导航到了含有表格的目标网址。接着通过对`<tbody>`内部所有`<tr>`标签的应用循环迭代实现了逐行扫描的功能,最后把各列的具体数值按顺序存储在一个二维数组里以便后续分析处理。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值