为了账号安全,请及时绑定邮箱和手机立即绑定

使用来自 AJAX 网站的 selenium 和 beautifulsoup

使用来自 AJAX 网站的 selenium 和 beautifulsoup

人到中年有点甜 2021-10-26 16:52:45
我花了很长时间尝试浏览 html、javascript、网络流量等,并学习了很多关于 javascript、blob、base64 解码/图像编码的知识,但我似乎仍然无法弄清楚如何提取这些视频中的图片来自本网站:https : //www.jamesallen.com/loose-diamonds/all-diamonds/这是我所知道的:每个视频实际上是一组多达 512 张图像,这些图像是通过名为 setX.bin(X 是一个数字)的文件从服务器检索的。然后通过一个 int 数组将它们解析为一个 blob 对象(还有一些 base64,但我忘记了在哪里),以某种方式将其转换为图像。遵循源代码非常困难,因为它是故意编写为意大利面条式代码的。我怎样才能有效地提取每颗钻石的图像?我的一个解决方案是:我可以很容易地获得 setX.bin 文件,如果我只是以某种方式将它们“传递”到 javascript 函数中,那么我应该会很好。我的第二个解决方案是:手动旋转每个钻石并从缓存中提取图像或类似的东西。我想用python来做到这一点。编辑: 我在 SO 上找到了 javascript,它确实给出了“SecurityError:操作不安全”。这里是:function exportCanvasAsPNG(id, fileName) {    var canvasElement = document.getElementById(id);    canvasElement.crossOrigin = "anonymous";    var MIME_TYPE = "image/png";    var imgURL = canvasElement.toDataURL(MIME_TYPE);    window.console.log(canvasElement);    var dlLink = document.createElement('a');    dlLink.download = fileName;    dlLink.href = imgURL;    dlLink.dataset.downloadurl = [MIME_TYPE, dlLink.download, dlLink.href].join(':');    document.body.appendChild(dlLink);    dlLink.click();    document.body.removeChild(dlLink);}exportCanvasAsPNG("canvas-key-_w5qzvdqpl",'asdf.png');我从 Firefox 控制台运行它。当我在 python 中运行类似的执行脚本时,我遇到了同样的问题。我希望能够为每个画布抓取所有 360 度图像。Edit2:为了使这个问题更简单,我知道如何获取 setX.bin 文件,但我不知道如何将这组图像从 bin 转换为 jpg。每个 bin 文件是多个 jpg 文件。
查看完整描述

1 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

这些.bin文件似乎只包含与一些主要元数据连接在一起的 jpeg。您可以简单地遍历文件的字节以查找 jpeg 文件签名 ( 0xFFD8) 并切出每个图像:


JPEG_MAGIC = b"\xff\xd8"


with open("set0.bin", "rb") as f:

    s = f.read()


i = 0

start_index = s.find(JPEG_MAGIC)


while True:

    end_index = s.find(JPEG_MAGIC, start_index + 1)


    if end_index == -1:

        end_index = len(s)


    with open(f"out{i:03}.jpg", "wb") as out:

        out.write(s[start_index:end_index])


    if end_index == len(s):

        break


    start_index = end_index


    i += 1

结果:

//img1.sycdn.imooc.com//6177c20200015ae308860452.jpg

查看完整回答
反对 回复 2021-10-26
  • 1 回答
  • 0 关注
  • 189 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号