Javascript-人偶-文本查找

问题描述

我试图弄清楚如何使用Puppeteer在HTML页面搜索产品名称

例如,HTML的写法如下:

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

我想让Puppeteer做的是通过关键字找到 产品名称 产品名称的实际名称,然后单击文本,将浏览器重定向到href链接

如果您可以帮助,那就太好了!

谢谢。

解决方法

如果我理解正确,则需要按其文本内容查找链接,然后单击。如果是这样,则至少有两种方式:

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()函数。