javascript - Node/Puppeteer : trying to get all links using selector, 获取结果属性

标签 javascript puppeteer

我是 puppeteer 的新手,并且对 javascript 有点熟悉。我正在编写一个基于节点的程序。我遇到了一些奇怪的行为,我认为我只是做了一些愚蠢的事情。我加载谷歌图像搜索结果页面,并尝试使用选择器“a.islib”获取所有结果链接。该选择器在浏览器/开发工具中可以正常工作。在我的程序中,我正在做:

const links = await page.$$eval('a.islib', as => as.map(a => a.href));

数组条目的数量是正确的,但它们都是空字符串。我切换到这个只是为了看看发生了什么:

const links = await page.$$eval('a.islib', as => as.map(a => a));

第一个条目是“__jsaction”:{“click”:“J9iaEb”},它是第一个 anchor 元素的属性之一。为什么它不返回完整的 anchor 元素本身?!

提前致谢。 (P.S.我似乎使用的是puppeteer版本1.20。)

预计到达时间:这是我正在处理的链接:

https://www.google.com/search?q=dogs&hl=en&tbm=isch&tbs=rimg:CVk7HmLev_17XImDPO8esV0arKADKdM7jqM7dCa_1-61MenSKaBTjYm-qrRUA5ZBN55gHxKypVIfrnXZb0_1rIufBzLXmFELBm6_1vytevXlQkwmJqMP1Necxlbne6zAfmCcFk1wEP9DLWWljV0qEgnPO8esV0arKBEjPzeqLvmlKSoSCQDKdM7jqM7dEcto8VTESawhKhIJCa_1-61MenSIRIe3dPxnC54YqEgmaBTjYm-qrRRGEiFoX72OrQSoSCUA5ZBN55gHxEc5qRFT4QSO7KhIJKypVIfrnXZYR_1RulX7C8TYQqEgn0_1rIufBzLXhEsefAUHeutqyoSCWFELBm6_1vytEcto8VTESawhKhIJevXlQkwmJqMRuHNtQBKeSY0qEgkP1NecxlbnexFS8G2tqKwyOioSCazAfmCcFk1wESYDiIqo6UMbKhIJEP9DLWWljV0RNcI2y-eGBPdhxHWgL7B9uK8&tbo=u&sa=X&ved=2ahUKEwjZ0-izmJXoAhVOqZ4KHckfBhwQrnZ6BAgBEBc

这是我使用 a.islib 选择器获得的第一个元素(删除了大部分图像数据以保持较短)。我的代码正在提取下面列出的 jsaction 属性。

<a class="wXeWr islib nfEiy mM5pbd" jsname="sTFXNd" jsaction="click:J9iaEb;" data-nav="1" tabindex="0" style="height: 159px;"><div class="bRMDJf islir" jsname="DeysSe" style="width: 283px; height: 159px; margin-right: -14px;" jsaction="mousedown:npT2md; touchstart:npT2md;"><img class="rg_i Q4LuWd tx8vtf" src="data:image/jpeg;base64,/9j/4AA..." data-deferred="1" jsname="Q4LuWd" alt="Image result for dogs" data-iml="639.485000167042" data-atf="true"></div><div class="c7cjWc"></div><div class="h312td " jsname="bOERI"><span class="gRqDMe "><div class="lMSpef"><div class="O1vY7" aria-label="Click for video information"><span class="I1wio LyzHgf"><svg viewBox="0 0 24 24" focusable="false" class="MbCJkd" height="12" width="12"><path d="M0 0h24v24H0z" fill="none"></path><path d="M8 5v14l11-7z"></path></svg></span><span class=" RtIwE">13:12</span></div></div></span></div><div class="PiLIec" jsaction="click: gFs2Re"></div></a>

ETA2:这里没有 href。尽管如此,上面的第二个等待行似乎应该返回整个元素。给定选择器“a.islib”,我将如何获取它们的数组,然后我可以从中单击它或提取 href 等属性? TIA。

最佳答案

这就是我所做的,供大家引用。这将获取元素,单击它们(在本例中将更新 href),然后获取 href。似乎对我有用,希望这是执行此操作的正确方法。

 const links = await page.$$('a.islib', as => as.map(a => a));
 for (const link of links) {
    await link.click();
    const updatedHref = await page.evaluate(a => a.href, link);
 }

关于javascript - Node/Puppeteer : trying to get all links using selector, 获取结果属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60643412/

相关文章:

puppeteer - 如何清除 puppeteer 中的项目值

google-chrome-extension - Puppeteer 无法在 GitHub 操作中启动

javascript - 如何仅在使用 VueJS 将鼠标悬停在 div 上时增加数字?

javascript - React 库如何直接请求其源库?

puppeteer - 如何在离开当前页面之前拦截 Puppeteer 中的请求?

puppeteer : launch with no-sandbox and no-headless

node.js - 在 puppeteer Node.js 中获取 href 属性

javascript - Firefox 中存在多个问题,但 Chrome 中可以正常工作,没有任何问题

javascript - 如何从 JSON 字符串中检索多个属性值

javascript - 查询 JavaScript 代码的范围