【发布时间】:2021-08-24 22:20:06
【问题描述】:
我以前从未使用过这个库,所以如果这听起来像是一个愚蠢的问题,我深表歉意
所以,我想从这个网站中提取一些特定的文本
https://www.unieuro.it/online/
我已经拥有 browser.js,以及使 puppeteer 工作的所有要求
所以我只是导航到那个网站并让它搜索一些东西
请记住,这只是一个代码示例
await page.goto("https://www.unieuro.it");
await page.waitForSelector('input[name=algolia-search]');
await page.type("input[name=algolia-search]","echo dot")
await page.click(".icon-search")
到目前为止,没有什么奇怪的,它按预期工作,但是在这一步之后,事情很快就变得奇怪了。
首先,我完全无法让它等待任何选择器。
我试图让它等待类collapsed hits__hit,对于元素文章,甚至部分,它每次都会超时,所以我放弃并使用了
await page.waitForTimeout(3000);
从这里我试图提取具有类的元素:product-tile
具体来说,我需要标题,它位于 a 元素内,为 textContent
a 元素在 div 内,类 product-tile__title 所以我尝试的是一个简单的评估
var name = await page.$$eval(".product-tile__title" el => {
el.map(el => el.querySelector("a").textContent))
return el
})
这根本不起作用,它在一个数组中给了我一堆空对象
所以我尝试安装一个名为 puppeteer recorder 的扩展程序,并尝试使用它生成的代码
const element1 = await page.$('.collapsed:nth-child(1) > .product-tile > .item-container > .info > .title')
在这种情况下,element1 确实包含某些内容,但与标题无关
现在我被卡住了,无论如何我都无法获得我需要的对象,并且互联网上的结果没有帮助。
附注:
我希望有一种更简单的方法可以在节点中制作刮刀,为什么所有库都必须如此复杂,并且永远不会像你想要的那样工作
【问题讨论】:
标签: javascript node.js puppeteer