Puppeteer - Xpath 分组
要唯一地确定一个元素,我们可以借助 html 标记中的任何属性,也可以使用 html 标记上的属性组合。大多数情况下使用 id 属性,因为它对于页面是唯一的。
但是,如果不存在 id 属性,我们可以使用其他属性,如 class、name 等。如果不存在 id、name、class 等属性,我们可以使用仅对该标记可用的独特属性或属性及其值的组合来标识元素。为此,我们必须使用 xpath 表达式。
利用索引从匹配元素集合中获取一个元素称为组索引。如果 xpath 表达式标识多个元素,则我们可以使用组索引。
编写组索引的格式是首先是 xpath 表达式,然后是括在 [] 中的索引号。它表示一个索引从 1 开始的 xpath 数组。函数 last() 用于指向 xpath 数组中的最后一个元素。
语法
函数 last() 的使用语法如下 −
(/table/tbody/tr/td[1]/input)[last()]
语法
函数 position() 用于获取 xpath 数组中特定位置的元素。语法如下 −
(/table/tbody/tr/td[1]/input)[position()=1]
上述 xpath 表达式将从所有匹配元素的组中获取第一个元素。
在下图中,让我们识别突出显示的编辑框并在其中输入一些文本。
因此 xpath 表达式应如下 −

在上面的示例中,表中有两列(由 td 标签表示),其父级为 tr 标签。输入框位于第一列。
因此 xpath 表达式应如下 −
//table/tbody/tr/td[1]/input
在这里,我们使用 xpath 选择器,因此我们必须使用方法:page.$x(xpath value)。此方法的详细信息在 Puppeteer 定位器一章中讨论。
首先,请按照 Puppeteer 基本测试一章中的步骤 1 到 2 进行操作,如下所示 −
步骤 1 −在创建 node_modules 文件夹的目录(安装 Puppeteer 和 Puppeteer 核心的位置)内创建一个新文件。
有关 Puppeteer 安装的详细信息,请参阅 Puppeteer 安装一章。
右键单击创建 node_modules 文件夹的文件夹,然后单击新建文件按钮。

步骤 2 − 输入文件名,例如 testcase1.js。

步骤 3 − 在创建的 testcase1.js 文件中添加以下代码。
//Puppeteer library const pt= require('puppeteer') async function selectorGroupXpath(){ //以 headless 模式启动浏览器 const browser = await pt.launch() //浏览器新页面 const page = await browser.newPage() //启动 URL await page.goto('https://www.tutorialspoint.com/index.htm') //使用组索引 xpath 识别元素然后输入文本 const f = (await page.$x("//table/tbody/tr/td[1]/input"))[0] f.type("Puppeteer") //等待一段时间 await page.waitForTimeout(4000) //捕获屏幕截图 await page.screenshot({ path: 'tutorialspoint.png' }); //浏览器关闭 await browser.close() } selectorGroupXpath()
步骤 4 − 使用下面给出的命令执行代码 −
node <filename>
因此在我们的示例中,我们将运行以下命令 −
node testcase1.js

成功执行命令后,将在页面目录中创建一个名为 tutorialspoint.png 的新文件。它包含在浏览器中启动的页面的屏幕截图,其中包含文本 Puppeteer。