欢迎光临 - 我的站长站,本站所有资源仅供学习与参考,禁止用于商业用途或从事违法行为!

js教程

油猴脚本获取抖音视频JOSN数据

js教程 我的站长站 2023-07-23 共47人阅读

脚本介绍

重写XMLHttpRequest的Send函数达到拦截。
注意,是用户主页,比如:https://www.douyin.com/user/MS4wLjABAAAAd4IEE9JOezbMuKOhRFAEAwlN3D5qgBDvTjjqV2g5FHM?is_search=0&list_name=follow&nt=0

页面5秒钟后会在页面右下角生成一个按钮,点击后会在控制台打印数据

油猴脚本获取抖音视频JOSN数据
油猴脚本截图

一个是原始数据,一个是经过处理的数据(标题+作品地址)

油猴脚本代码

// ==UserScript==
// @name         抖音用户主页抓取
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        https://www.douyin.com/user/*
// @icon         https://lf1-cdn-tos.bytegoofy.com/goofy/ies/douyin_web/public/favicon.ico
// @grant        none
// ==/UserScript==
 
(function() {
    'use strict';
    var isFirst = true;
    var aweme_list = [];
    var nickname = "";
 
    function extractDataFromScript() {
        var scriptTag = document.getElementById('RENDER_DATA');
        if (!scriptTag) return;
 
        var encodedContent = scriptTag.innerHTML;
        var decodedContent = decodeURIComponent(encodedContent);
        var json = JSON.parse(decodedContent);
 
        for (var prop in json) {
            if (json.hasOwnProperty(prop) && prop !== "_location" && prop !== "app") {
                var user = json[prop];
                nickname = user.user.user.nickname;
                var post = user.post;
                var data = post.data;
                aweme_list = aweme_list.concat(data);
            }
        }
    }
 
    function createButton() {
        const button = document.createElement('button');
        button.textContent = '点击我';
        button.style.position = 'fixed';
        button.style.right = '20px';
        button.style.bottom = '30%';
        button.addEventListener('click', buttonClick);
        document.body.appendChild(button);
    }
 
    function buttonClick() {
        console.log(aweme_list);
        const files = [];
        aweme_list.forEach((item) => {
            if (item.aweme_type === 0 || item.awemeType === 0 || item.aweme_type === 61 || item.awemeType === 61) {
                try {
                    files.push({ name: item.desc, url: item.video.play_addr.url_list[0] });
                } catch (error) {
                    files.push({ name: item.desc, url: item.video.playAddr[0].src });
                }
            } else if (item.aweme_type === 68 || item.awemeType === 68) {
                var urlList = item.images.map(img => {
                    try {
                        return img.url_list[0];
                    } catch (error) {
                        return img.urlList[0];
                    }
                });
                files.push({ name: item.desc, urlList: urlList });
            }
        });
 
        var data = { nickname: nickname, aweme_list: files };
        console.log(data);
    }
 
    function interceptResponse() {
        var originalSend = XMLHttpRequest.prototype.send;
        XMLHttpRequest.prototype.send = function() {
            var self = this;
            this.onreadystatechange = function() {
                if (self.readyState === 4) {
                    if (self._url.indexOf("/aweme/v1/web/aweme/post") > -1) {
                        var json = JSON.parse(self.response);
                        var data = json.aweme_list;
                        aweme_list = aweme_list.concat(data);
                    }
                }
            };
            originalSend.apply(this, arguments);
        };
    }
    function scrollPageToBottom() {
        const SCROLL_DELAY = 1000; // Adjust the delay between each scroll action (in milliseconds)
        let scrollInterval;
 
        function getScrollPosition() {
            return window.scrollY || window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
        }
 
        function scrollToBottom() {
            window.scrollTo(0, document.body.scrollHeight);
        }
 
        function hasReachedBottom() {
            return getScrollPosition() >= (document.body.scrollHeight - window.innerHeight);
        }
 
        function scrollLoop() {
            if (!hasReachedBottom()) {
                scrollToBottom();
            } else {
                console.log("Reached the bottom of the page!");
                clearInterval(scrollInterval);
                // You can perform additional actions here after reaching the bottom of the page.
            }
        }
 
        function startScrolling() {
            scrollInterval = setInterval(scrollLoop, SCROLL_DELAY);
        }
 
        function createButton() {
            const button = document.createElement('button');
            button.textContent = '点击开始下拉';
            button.style.position = 'fixed';
            button.style.right = '20px';
            button.style.bottom = '35%';
            button.addEventListener('click', startScrolling);
            document.body.appendChild(button);
        }
 
        createButton();
    }
 
    // To start scrolling, call the function:
    scrollPageToBottom();
 
 
    if (isFirst) {
        console.log("首次加载");
        isFirst = false;
        setTimeout(function() {
            extractDataFromScript();
            createButton();
        }, 5000); // 延迟时间为5000毫秒(即5秒)
    }
 
    interceptResponse();
 
})();


相关推荐
  • 油猴脚本
  • js获取
  • 利用油猴脚本突破百度网盘下载限速方法

    教程介绍分享一篇自用利用油猴脚本突破百度网盘下载限速方法,手机安卓版,PC版现在已经很难破解了,下载可以达到svip会员效果。油猴脚本百度网盘不限速截图准备软件①Firefox Nightly②idm+③(Tampermonkey)油猴④软件小妹的脚本《百度网盘简易下载助手》...

    经验分享 1801 3年前
  • 油猴脚本去除csdn登录才能复制限制
    油猴脚本去除csdn登录才能复制限制

    作为程序猿,应该会经常去csdn参(chao)考(xi)代码,今天在复制一篇文章的代码的时候,突然发现需要登录才能复制,但是我用github授权登录的时候居然失败了!突发奇想,写个脚本解除这个限制吧!稍微看一下文档结构...

    浏览器插件 160 2年前
  • 百度网盘提取码自动填写油猴脚本
    百度网盘提取码自动填写油猴脚本

    插件介绍百度网盘提取码自动填写油猴脚本,新上线的网盘油猴脚本,它可以实现识别网页中的网盘提取码并自动填写的功能。这款油猴脚本支持自动填充百度云、360盘等的提取码,还额外带有淘宝天猫找优惠...

    浏览器插件 756 3年前
  • B站免登录视频解析下载油猴脚本
    B站免登录视频解析下载油猴脚本

    插件说明B站免登录视频解析下载油猴脚本是一款可以帮助用户在电脑端快速下载哔哩哔哩B站视频的工具,能够帮助用户下载任何自己喜欢的视频内容,使用起来非常方便,无需登陆账户即可使用,有需要的用户不...

    浏览器插件 432 3年前
  • Motrix百度网盘直链下载浏览器脚本v0.0.7
    Motrix百度网盘直链下载浏览器脚本v0.0.7

    脚本说明Motrix百度网盘直链下载浏览器脚本是一款非常好用的百度网盘直链下载工具,搭配Motrix下载软件使用,能够不限速下载。注意事项:此脚本默认会临时分享指定下载的文件,这样才能通过svip账号解析...

    浏览器插件 449 3年前
  • js如何获取指定网址中的参数

    之前我的站长站分享的都是用JS获取当前网址URL中的参数,我们这次教大家如何获取指定网址中的参数。js获取网址参数代码JS获取网址的方法都一样,我们同样使用函数的方法。function getQueryParam(url, param) {// 创建一个新的URL对象const urlObj = ne...

    js教程 6 1个月前
  • JavaScript如何获取自己的加载路径

    我们都知道JavaScript获取当前路径的方法用:var currentFullPath = window.location.href;console.log(currentFullPath);这样就可以获取完整路径。今天我的站长站分享不是获取当前URL路径,而且获取JS自己本身的加载路径,比如获取:<script src="https://...

    js教程 7 1个月前
  • js获取字符长度函数分享

    js获取字符长度函数function objLen(str) { if (str == null) return 0; if (typeof str != "string") { str += ""; } return str.replace(/[^\x00-\xff]/g, "01").length;}函数使用方法var arr1 = &#39;ABCD1234&#39;console.log(objLen(...

    js教程 13 10个月前
  • jQuery+JavaScript获取和修改网页title标题的方法

    分享jQuery框架和原生JavaScript获取和修改网页title标题的方法,两个一起分享,jQuery记得引入jQuery库。获取网页title方法jQuery方法:$("title").text();JavaScript方法:document.getElementsByTagName("title")[0].innerText修改网页title方法jQuery方...

    js教程 53 1年前
  • jquery如何获取input的type值

    jquery如何获取input的type值,首先我们要知道获取input的选择器用:$("input:name")然后获取值用:.val()完整代码是:$("input:name").val()

    js教程 52 1年前