javascript - Javascript - Puppeteer - 文本查找
问题描述
我试图弄清楚如何使用 Puppeteer 来搜索 HTML 页面,以获取产品名称。
例如,HTML 是这样写的:
<a class="example" href = "example_link">PRODUCT NAME</a>
我想让 Puppeteer 做的是通过关键字找到PRODUCT NAME或PRODUCT NAME的实际名称,然后让它点击将浏览器重定向到 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()
推荐阅读
- mysql - 如何确定每个订单是否超过或低于 SQL 中的平均订单价值
- sql - 许多其他实体引用的 SQL 实体 - 最佳实践
- r - ggplot散点图排列X轴值
- javascript - 近乎实时地从网站上抓取动态内容
- xml - 是否可以将 XML 中定义的系统变量作为 CAPL 中的函数参数传递
- sql - 如何在 SQL 的 where 子句中使用 sum?
- ios - 如何从指定的 ChildController 在 ParentController 中捕获导航
- ansible - 我们如何在来自 ansible Tower 的电子邮件通知中包含 playbook 相关信息,例如 playbook 中的一些变量值?
- python - Tkinter:使用网格列的框架中小部件的不规则间距
- c# - 计算 2 表 where 条件 - Linq