loading...

虫虫钢琴免登录


最近发现一个看简谱的网站,虫虫钢琴,里面双手弹奏的资源很多,以往在其他网站看到的都是单手的,可惜查看完整曲谱是需要登录和购买vip的。

那这我能忍吗?有没有不花钱也可查看完整曲谱的方式呢?哎,还真有,随便找一首谱子,例如萱草花钢琴简谱 数字双手 李聪,查看源代码的后,我们发现曲谱内容实际上是放在一个iframe里的。

<iframe
  id="ai-score"
  src="/sheetplayer/web.html?jianpuMode=1&amp;url=https://s201.lzjoy.com/res/statics/fileupload/ccmz/202212/97/975160-638bd3501c8ed.ccmz"
  frameborder="0"
  scrolling="no"
></iframe>

网站给这个iframe设置了一个scrolling="no"属性,尝试把它移除看看。不错,完整的曲谱已经显示出来了,只是查看完整曲谱按钮看着有些碍眼,没事,我们再删除包含按钮遮罩在内的元素。

<div class="img-mask" style="display: block;">
  <img
    class="mask"
    src="https://s201.lzjoy.com/public/web_static/images/score_details/mask.png"
  />
  <p class="img-mask_p">
    <span class="buy_whole" style="display: none;">
      当前为预览页面,购买后查看全部
    </span>
    <span class="load_whole">查看完整曲谱 &gt;</span>
  </p>
</div>

但是如果我们每次打开页面都需要这么操作一遍,未免有些繁琐。有没有办法让这个过程自动化呢?对,你也想到了吧,我们可以按照上面的步骤写一个油猴脚本。

(function () {
  "use strict";
  var ai_score = document.querySelector("#ai-score");
  var img_mask = document.querySelector(".img-mask");
  if (ai_score) {
    // 延迟移除iframe的scrolling属性
    setTimeout(function () {
      ai_score.removeAttribute("scrolling");
    }, 1000);
  }
  if (img_mask) {
    img_mask.remove();
  }
})();

既然它的曲谱内容在未登录的情况下已经完整地呈现在代码里,那直接改变登录状态是不是更好?说干就干,通过审查全屏按钮绑定的事件发现

document.getElementById("s_d_fullBtn").addEventListener("click", function () {
  if (
    !isMobile() &&
    (!identity.getUid() || !identity.getIsVip()) &&
    is_pay == "0"
  ) {
    popup2();
    return;
  }
  // ......
});

getUidgetIsVip这两个方法的字面意思很容易让人想到,一个是获取登录人id,另一个则是获取是否为vip,既然如此,直接让它们都返回真值。

(function (innerWindow) {
  "use strict";
  innerWindow.identity.getUid = function () {
    return "1000";
  };
  innerWindow.identity.getIsVip = function () {
    return 1;
  };
})(unsafeWindow);

至此,查看完整曲谱,全屏,下载,打印等功能都已经可以正常使用。