首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从Facebook Messenger对话中下载所有照片?JavaScript香草

如何从Facebook Messenger对话中下载所有照片?JavaScript香草
EN

Stack Overflow用户
提问于 2018-08-30 05:27:01
回答 1查看 1.1K关注 0票数 2

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

我正在尝试通过Chrome上的JS控制台来实现。我发现,当你在lightbox中打开照片,滚动浏览所有的照片(所以它们都加载到浏览器中),它们都在一个div中,这个div具有相同的className和href属性的锚点,可以得到完整的res照片。所以我想,首先我要创建一个包含所有URL的表,然后弄清楚如何在所有URL上触发下载。

这是我失败的尝试:

代码语言:javascript
复制
var anchors = [];
document.getElementsByClassName('_42rl').forEach(function(value, index, ar) {
anchors.push(ar[index].href);
});

但这会导致一个错误:

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

所以我试了一下:

代码语言:javascript
复制
var base = document.getElementsByClassName('_42rl');
var list = [];

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

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

EN

回答 1

Stack Overflow用户

发布于 2018-08-30 06:06:21

因为你会得到这个错误:

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

这是因为getElementsByClassName和getElementsByTagName返回了一个HTMLCollection的集合。在某些浏览器中,没有定义forEach。因此,您可以:

重新创建您的Array.prototype.forEach.call Polyfill

  • use

方法

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

举个例子:

代码语言:javascript
复制
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);
代码语言:javascript
复制
<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>

使用多边形填充:

代码语言:javascript
复制
// Polyfill
if (typeof NodeList.prototype.forEach === "undefined") {
    NodeList.prototype.forEach = Array.prototype.forEach;
}

if (typeof HTMLCollection.prototype.forEach === "undefined") {
    HTMLCollection.prototype.forEach = Array.prototype.forEach;
}

// your code....
var list = [];
document.getElementsByClassName('_42rl').forEach(function(element, index, array) {
    element.getElementsByTagName('a').forEach(function(ele, idx) {
        list.push(ele.href);
    });
});
console.log(list);
代码语言:javascript
复制
<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>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52086295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档