【发布时间】:2020-03-11 19:41:22
【问题描述】:
我是 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"},它是第一个锚元素的属性之一。为什么它不返回完整的锚元素本身?!
提前致谢。 (P.S. 我好像用的是 puppeteer 1.20 版。)
ETA:这是我正在处理的链接:
这是我使用 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。这是预期的行为吗?我的第二个等待行没有返回 元素本身,这似乎仍然很奇怪。
-
有趣的是:在谷歌图像搜索结果页面中,图像的 href 似乎只有在您单击它以显示右侧的黑色“详细信息”框时才会被填充。我没有意识到这一点,显然点击了一个,这让我误以为他们立即就在那里。
标签: javascript puppeteer