上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

[学习记录] 使用脚本向页面上添加新元素

[复制链接]
  • TA的每日心情
    郁闷
    4 天前
  • 签到天数: 2 天

    [LV.1]初来乍到

    2

    主题

    9

    回帖

    13

    积分

    助理工程师

    积分
    13
    发表于 前天 18:34 | 显示全部楼层 | 阅读模式
    悬赏2油猫币未解决
    let httpRequest = new XMLHttpRequest();
    httpRequest.open(
      "POST",
      "https://api.bilibili.com/x/web-interface/archive/like/triple"
    );
    httpRequest.setRequestHeader(
      "Content-type",
      "application/x-www-form-urlencoded"
    );
    httpRequest.withCredentials = true; //设置跨域发送带上cookie
    let aid = window.__INITIAL_STATE__.aid;
    let sKey = "bili_jct";
    let csrf =
      decodeURIComponent(
        document.cookie.replace(
          new RegExp(
            "(?:(?:^|.*;)\\s*" +
              encodeURIComponent(sKey).replace(/[-.+*]/g, "\\$&") +
              "\\s*\\=\\s*([^;]*).*$)|^.*$"
          ),
          "$1"
        )
      ) || null;
    //上面这一段就是取出csrf,在cookie里面是bili_jct,这一段我是直接copy的,总之获取到就好了啦
    httpRequest.send("aid=" + aid + "&csrf=" + csrf);
    httpRequest.onreadystatechange = function () {
      if (httpRequest.readyState == 4 && httpRequest.status == 200) {
        var json = JSON.parse(httpRequest.responseText);
        console.log(json);
        if (json.code == 0) {
          alert("三连成功!刷新页面可见");
        } else {
          alert("三连失败/(ㄒoㄒ)/~~");
        }
      }
    };

    let aid = window.__INITIAL_STATE__.aid; 这行代码是怎么知道要去window.__INITIAL_STATE__里面取的。
    我的代码如下

    // ==UserScript==
    // @name         b站真一键三联
    // @namespace    https://bbs.tampermonkey.net.cn/
    // @version      0.1.0
    // @description  try to take over the world!
    // @author       You
    // @match        https://www.bilibili.com/video/*
    // @run-at       document-end
    // @grant        none
    // ==/UserScript==
    
    (function() {
        'use strict';
        let divEle = document.createElement("div");
        divEle.addEventListener("click", async ()=>{
            let csfr = window.document.cookie.match(/(?<=bili_jct=).*?(?=;)/);
            let aid = window.__INITIAL_STATE__.aid;
            let response = await fetch("https://api.bilibili.com/x/web-interface/archive/like/triple", {
                method: "POST",
                headers: {
                    "Content-type": "application/x-www-form-urlencoded"
                },
                body: `aid=${aid}&eab_x=2&ramval=4&source=web_normal&ga=1&csrf=${csfr}`,
                credentials: 'include',
                cookie: window.document.cookie
            });
            let json = await response.json();
            if(json?.code == 0){
                alert("三连成功");
            }else{
                alert("三连失败");
            }
        });
        divEle.innerHTML = '<input type="button" value="一键三连"/>';
        let likeEle = document.querySelector('.toolbar-left-item-wrap:has([title="收藏(E)"])');
        likeEle.after(divEle);
    })();

    但是我发现,B站好像可以知道有脚本在运行,启动脚本之后
    1.png
    右上角账号相关的东西没有了,评论也没有了,关闭脚本后回复正常,是否是我没有使用 MutationObserver直接插入的缘故,最后附上一张勉强算得上成功的截图
    2.png

    上传头像失败
  • TA的每日心情
    慵懒
    2024-10-28 07:07
  • 签到天数: 193 天

    [LV.7]常住居民III

    712

    主题

    5968

    回帖

    6765

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6765

    荣誉开发者喜迎中秋油中2周年生态建设者

    发表于 昨天 23:11 | 显示全部楼层
    b站好像现在太早注入出现diff不一致就会报错
    我也碰到了好几次这个问题

    可以正常加载的在教程的最下方
    https://learn.scriptcat.org/%E6% ... E%E4%B8%89%E8%BF%9E

    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表