首页 > 解决方案 > Javascript - Puppeteer - 文本查找

问题描述

我试图弄清楚如何使用 Puppeteer 来搜索 HTML 页面,以获取产品名称。

例如,HTML 是这样写的:

<a class="example" href = "example_link">PRODUCT NAME</a>

我想让 Puppeteer 做的是通过关键字找到PRODUCT NAME或PRODUCT NAME的实际名称,然后让它点击将浏览器重定向到 href 链接的文本。

如果你能帮忙,那就太好了!

谢谢。

标签: javascriptpuppeteerwebautomation

解决方案


如果我理解正确,您需要通过其文本内容找到一个链接才能点击。如果是这样,至少有两种方法:

const puppeteer = require('puppeteer');

(async function main() {
  try {
    const browser = await puppeteer.launch({ headless: false, defaultViewport: null });
    const [page] = await browser.pages();

    const textToFind = 'More information...';

    // Way 1.

    await page.goto('https://example.org/');

    const link1 = await page.evaluateHandle(
      text => [...document.querySelectorAll('a')].find(a => a.innerText === text),
      textToFind
    );
    await link1.click();
    await page.waitFor(3000);

    // Way 2.

    await page.goto('https://example.org/');

    const [link2] = await page.$x(`//a[text()="${textToFind}"]`);
    await link2.click();
    await page.waitFor(3000);

    await browser.close();
  } catch (err) {
    console.error(err);
  }
})();

如果需要查找部分匹配,可以在第一种方式中使用includes()代替,在第二种方式中使用===XPath函数。contains()


推荐阅读