问题描述
我试图弄清楚如何使用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()
函数。