使用 Xpath 的 Puppeteer 选择器

Posted

技术标签:

【中文标题】使用 Xpath 的 Puppeteer 选择器【英文标题】:Puppetteer Selects using Xpath 【发布时间】:2022-01-04 23:11:54 【问题描述】:

我正在尝试使用 puppeteer 动态选择一个选项,但在如何正确获取它时遇到了一些问题。我需要获取与option 标签关联的实际value。这使我的问题变得更加困难。我搜索了一下,发现有些人正在使用 Xpath 使问题更容易解决,但似乎我的 Xpath 无法正常工作,因为我遇到了错误 ->

字符串 '//select[@id = "wrestler"]/option[text() = Henri Mugnier]' 不是有效的 XPath 表达式。

Henri Mugnier 在我的holderArr 数组中的索引为 0。

这是我的小代码sn-p。

const option = (await frame.$x(
    `//select[@id = "wrestler"]/option[text() = $holderArr[i].name]`
))[0];

holderArr 是从另一个函数传入的,它是一个对象数组。下拉列表是一个名称列表,但每个名称的 value 只是随机数,所以我希望使用 xpath,然后使用这样的函数获取值

const value = await (await option.getProperty('value')).jsonValue();

重现步骤:

    转到https://www.trackwrestling.com/seasons/ 2021-22 高中男生 > 选择“田纳西州中学体育协会” 点击顶部的“团队” 选择任何团队 选择“匹配”或更多 选择匹配项(这个下拉菜单是我要访问的)

【问题讨论】:

请显示您正在使用的网站或标记。见minimal reproducible example。谢谢。 如果要获取元素的值,使用evaluate()并返回值。 【参考方案1】:

这就是我最终让它工作的方式。这将使用 puppeteer 为您提供 option 标签上的 value 属性。

 let [optElementHandle] = await frame.$x(`//select[@id="wrestler"]//option[contains(text() , "$holderArr[i].name")]`)
    const text = await optElementHandle.getProperty('value')
    const value = await text.jsonValue()

【讨论】:

以上是关于使用 Xpath 的 Puppeteer 选择器的主要内容,如果未能解决你的问题,请参考以下文章

如何在 puppeteer Node.js 中将 const 添加到 await page.$x? xpath 中的常量

Puppeteer js id元素包含

Puppeteer 中的选择器语法

Puppeteer,保存网页和图像

Puppeteer 选择表格行/选项

使用 Puppeteer 获取 HTML 属性的值