我是 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。)
预计到达时间:这是我正在处理的链接:
这是我使用 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/