如何从Facebook Messenger Conversation下载所有照片? JavaScript香草

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从Facebook Messenger Conversation下载所有照片? JavaScript香草相关的知识,希望对你有一定的参考价值。

我很难从Messenger上的一个对话中下载所有照片。

我正试图通过Chrome上的JS控制台来实现。我发现当你在灯箱中打开照片时,滚动浏览所有照片(所以它们都加载到浏览器),它们都在一个div中,它具有相同className和href属性的锚点,导致完整的res照片。所以我首先想到的是,我将创建一个包含所有URL的表,然后计算出如何触发所有URL的下载。

那是我不成功的尝试:

var anchors = [];
document.getElementsByClassName('_42rl').forEach(function(value, index, ar) {
anchors.push(ar[index].href);
});

但这会导致错误:

VM883:2未捕获的TypeError:document.getElementsByClassName(...)。forEach不是函数:2:42

所以我试过这个:

var base = document.getElementsByClassName('_42rl');
var list = [];

Array.prototype.forEach.call(base, function(element, index, array){
    list.push(element.getElementsByTagName('a').href);
});

这导致数组中充满了未定义的值..

答案

因为你收到这个错误:

document.getElementsByClassName(...)。forEach不是函数

发生这种情况是因为getElementsByClassName和getElementsByTagName返回一个htmlCollection集合。在某些浏览器中,没有定义forEach。因此你可以:

  1. 创造一个Polyfill
  2. 再次使用您的Array.prototype.forEach.call方法

您可以在MDN上阅读有关HTMLCollection的更多信息

一个例子:

var base = document.getElementsByClassName('_42rl');
var list = [];
Array.prototype.forEach.call(base, function(element, index, array){
    Array.prototype.forEach.call(element.getElementsByTagName('a'), function(ele, idx) {
        list.push(ele.href);
    });
});
console.log(list);
<div class="_42rl"><a href="11">Anchor 11</a><a href="12">Anchor 12</a></div>
<div class="_42rl"><a href="2">Anchor 2</a></div>
<div class="_42rl"><a href="3">Anchor 3</a></div>
<div class="_42rl"><a href="4">Anchor 4</a></div>

以上是关于如何从Facebook Messenger Conversation下载所有照片? JavaScript香草的主要内容,如果未能解决你的问题,请参考以下文章

如何从 WebView 将数据返回给 Facebook Messenger Bot?

如何从Facebook Messenger Conversation下载所有照片? JavaScript香草

如何在 Rasa 的 action.py 中通过 Facebook Messenger 从用户那里获取图像

如何检查和编码来自 Facebook Messenger 的输入表情符号?

如何打开 Facebook Messenger 并直接发送给某人?

如何在按钮单击时将用户发送到 Facebook 页面(Facebook Messenger)