遥想我2020从同济毕业似乎就在昨天,这么快又到了一年一度的毕业典礼了。今年和去年一样,同济又使用了Photoplus的图片直播服务来实时将摄影师在毕业典礼现场拍摄的照片上传到网站供同学们观看、下载。
然而这个服务哪都好就是下载照片实在不方便。如果想下载原图的话得一张张下载,没有提供一个批量下载的功能。但这哪难得倒我?既然能一张张查看原图那就一定能自动化地批量下载所有原图。经过稍稍摸索,就成功批量下载所有原图,把方法分享给大家。
以下是授人以渔部分,学会这些以后碰到任何Photoplus或类似图片直播就可以自己下载原图。我写得很详细的,小白也能一步步照着操作。如果嫌麻烦可以拖到最后有授人以鱼部分,网盘链接是我下载好的图片。
首先把图片直播的链接用电脑的Chrome浏览器打开。如果从微信看见的可以进入图片直播后点击右上角打开菜单然后点“复制链接”发到电脑就行了。
2020毕业典礼:https://live.photoplus.cn/live/pc/73891677/#/live
2021毕业典礼:https://live.photoplus.cn/live/pc/61257843/#/live
打开链接后按F12就会弹出开发者工具。然后切换到Network的标签页(Network里记录弹出开发者工具之后的所有网络请求)应该会看到下图,刚打开是空的。
然后只需要刷新一下页面,就能看到一大堆网络请求。
原图的链接就藏在某个请求里,问题是这么多请求怎么找呢?很简单,随便点开一张图片然后点击查看原图,就可以在地址栏复制到这张原图的链接了
不过并不推荐复制完整链接,因为越完整越可能之后搜索不到(在这里如果复制完整链接之后就会搜不到),因为链接可能是通过多个字符串拼接而成的,可以只复制其中一段,比如文件名HAO3856_w1823.JPG
随后在开发者工具点击这个搜索按钮,左侧就会弹出一个搜索面板
在搜索框粘贴刚才复制的内容,回车,它就会在所有请求和响应里搜索,可以发现前两个请求是请求图片内容的,第三个请求才是我们要找的,返回内容是有图片信息的
于是我们找到了https://live.photoplus.cn/pic/pics 这个接口是提供图片链接列表的,不过可以发现这个接口只返回了500张图片信息,而pics_total写明了一共有2147张
原因就是存在分页,而请求中的count参数设置为了500所以第一页加载了500张
这时可以通过下拉图片列表让它请求后续内容,然后合并各个请求响应的数组。不过万一碰到图片更多的情况呢?就会很不方便,这里教大家另一种方法,可以修改count参数为更大的值让它一次返回所有图片信息。
可以发现如果简单地修改count参数是会报错的,猜测_s参数是签名,后端会校验
就需要将鼠标移到这个请求的Initiator(在这里就是xhr.js)想办法在签名前修改参数
就会显示这个请求的函数调用堆栈,点击getPhotos右侧的链接就会跳转到这个函数
(为什么是getPhotos函数呢?这里其实要靠经验了,当然也要靠一些知识。vuex.js、vue.js都是库文件,不会选它,还有比如包含min的基本也是库文件。E、W、Ot、Ge这种是机器自动生成的函数名也不选,getPhotos一看就是人写的函数名而且语义符合这个请求的作用所以先进入getPhotos函数试试。不选request是因为我们要在签名前改好参数,让签名使用我们改好的参数。)
打开这个函数后点击函数第一行的行号打个断点,下次这个函数运行就会中断
然后刷新一下页面,可以看到Paused in debugger,页面也加载不出来,说明页面的js执行在这里中断了
鼠标移到this.photoParams可以发现参数的count就是500,说明找对函数了
只需切换到Console标签页(这是执行JavaScript命令的地方)输入this.photoParams.count=5000回车即可把参数改为5000
然后点击页面的蓝色按钮即可恢复js执行
这时再到Network找到/pics/pics请求,选择Preview标签页,可以发现使用的参数是我们刚才改的5000,一次请求就把所有照片信息加载全了
随后点击展开result,右键点击pics_array,再点击Store object as global variable保存这个数组,就能看见下面弹出的console把这个数组保存为了temp1,之后在console通过temp1就能用这个数组了
这个数组有2147个对象,每个对象保存了一张照片的信息,可以看到有个origin_img的属性,猜测是原图链接,尝试下载一张之后大小有几兆,并且和网页点击“查看原图”的链接一样,确认origin_img就是原图链接
随后在console执行 links='';for (var img of temp1) links+='https:'+img.origin_img+'\n';console.log(links);
这句JavaScript即可输出所有图片的原图链接,再点击Copy即可复制这些链接
粘贴链接到迅雷等下载工具即可批量下载这些图片。我在交大校园网下载最高能冲到50M/s,因为学校给每个寝室都免费配备了两条千兆宽带
以上是授人以渔部分,如果嫌麻烦也可以直接从网盘下载我已经下载好的图片。
https://cloud.189.cn/web/share?code=2IBJnuVfIVJf(访问码:r5cb)
----最后是一点个人碎碎念----
尽管同济游泳馆对我恶意伤害,我不断维权直至今日仍未给我正式处理结果;尽管同济至今未把我的毕业照文件给我;尽管同济卡我档案不转给交大,交大收到时已经过了新生收档时间,毕业后还着实恶心了我一把给我添了不少麻烦
但同济的朋友求助我后我仍然帮忙下载了毕业典礼的照片。
如果是曾经的我必然不会理睬,不过成长让我更大度,现在我不仅帮忙下载了毕业典礼的照片还把技术分享给大家。
曾经的同济为了问卷卡我们的毕业证书
现在的同济变得更大度了吗?
emmm似乎并没有,甚至拔刀了(点击查看警方通报)
2021年7月7日
想批量下载原图(4283个图片)[url]https://live.photoplus.cn/live/pc/13331790#/live[/url]
只能获取到100张图片链接
修改count=5000,报错,请指点,如何批量获取全部原图照片链接
截图链接
[img]https://img2.imgtp.com/2024/03/29/LI7gKvLR.png[/img]
[img]https://img2.imgtp.com/2024/03/29/irC55i1i.png[/img]
[img]https://img2.imgtp.com/2024/03/29/HjvdOuDr.png[/img]
[img]https://img2.imgtp.com/2024/03/29/Zl2vyzSr.png[/img]
[img]https://img2.imgtp.com/2024/03/29/55QlKT0h.png[/img]
[img]https://img2.imgtp.com/2024/03/29/hM2kyBhj.png[/img]
[img]https://img2.imgtp.com/2024/03/29/07fopq0V.png[/img]
4283张照片,如果按单次按100个图片链接下载,怎样知道哪个下载了,哪个没有下载,如何避免重复下载(同 照片不同名)
感谢您的分享,我在使用该方案获取1873张图片时出现了Request content was evicted from inspector cache的提示,最多只能获取到1200张左右。
报错时观察到文件缓存6M,但我复现您的同济案例却是成功的,缓存只有3.9M,不知道该如何处理才好,期待您的指点。