使用油猴脚本重定向解决使用百度时遇到的百度 APP 广告页面

Author Avatar
✨小透明・宸✨ 2019-04-26 13:52:08
  • 在其它设备中阅读本文章

虽然百度搜索的声望近年来一落千丈,但是不可否认的是,在搜索某些方面的东西时它相对于 Google 还是有很大优势的。

比如……小透明作为学生党,经常有搜索习题解析抄答案的需求。在这件事上百度就可以吊打 Google:使用题目原文进行搜索,Google 不一定能搜索到有价值的东西,但是使用百度的话——百度文库有相关习题集的参考答案、百度知道或者作业帮上早就有热心网友写好了题目解析,借鉴照抄起来非常方便(´゚ω゚`)

当然,百度的搜索结果中,位于最前面的除了广告就是百度自家的东西,实在是有失公允……百度作过的恶不少,不过这个并不是小透明今天写这篇废文的重点(=’_’=)

今天小透明在搜索某个数学名词的时候,再次被百度恶心了一把,一图流:

暂且不论为什么搜索数学名词也会出现一个 C$DN,只是当小透明点进去的时候,屏幕上并没有出现想要看到的页面,而是弹出了……(°ー°〃)?

完全不能进入想要查看的网页,只有一个以“更佳阅读体验”的名义强行插入的“下载百度 APP”的广告,就和春节期间进行过的推广活动一样( •̥́ ˍ •̀ )

“我从未见过有如此厚颜无耻之人!”

更有趣的是,这个广告在小透明日常使用的猴机版 Firefox 之外都是无法复现的。使用 PC 版 Firefox 打开“响应式设计模式”(相当于使用手机的屏幕尺寸和 User-Agent)和 MIUI 自带的浏览器进行测试,搜索相同的关键词“旋转曲面面积 圆柱”,点开这个 C$DN 的搜索结果,都没有出现广告∑(゚д゚*)

嗯……不知道是不是被针对了?‪( ⸝⸝⸝•_•⸝⸝⸝ )‬


碰到了这种事情,真的去下载 APP 当然是不可能的,应该想个办法绕过去才对(´っω・。`)先看一下这个网页的 URL:

https://mbd.baidu.com/ma/tips?
t=wise_smartpage&
swanUrl=%2Fpages%2Fblog%2Farticle-detail%3FarticleId%3D85639823%26callback%3D_bdbox_js_582%26oauthType%3Dsearch%26upgrade%3D0%26userName%3Dweixin_33874713&
appKey=obyjgY148KrH0rrRwn9OgySgEhwHgBzK&
webUrl=https%3A%2F%2Fblog.csdn.net%2Fweixin_33874713%2Farticle%2Fdetails%2F85639823&
word=%E6%97%8B%E8%BD%AC%E6%9B%B2%E9%9D%A2%E9%9D%A2%E7%A7%AF%2B%E5%9C%86%E6%9F%B1&
swan_from=1270000000000000&
from=1000969a&
title=%E6%97%8B%E8%BD%AC%E6%9B%B2%E9%9D%A2%E9%9D%A2%E7%A7%AF%2B%E5%9C%86%E6%9F%B1&
gpc=&
m=&
nojc=&
pn=&
sa=oxi_tieba_2&
si=&
srlang=&
usm=&
keysearch=manuldq

URL 实在是太太太长了~所以小透明按照参数把它拆成了若干行。另外点击旁边的“复制代码”按钮(原版 Material Theme 是没有的,是小透明自己加上的功能~)然后粘贴到地址栏,就可以看到百度的 APP 广告了……(⋟﹏⋞)

如果仔细看的话,这里面有个叫 webUrl 的参数,内容就是编码后的要访问的网页 URL。JS 中有个函数 decodeURIComponent() 可以对编码后的 URL 进行解码:

//输出:https://www.google.com/
decodeURIComponent('https%3A%2F%2Fwww.google.com%2F');

另外,要从当前访问的 URL 中提取参数,也有已经造好的轮子(っ╹◡╹)ノ比如下面这个使用正则表达式的实现:

function getQueryString(name) {
    var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
    var r = window.location.search.substr(1).match(reg);
    if (r != null) {
        return unescape(r[2]);
    }
    return null;
}

//假设当前访问的URL是:https://www.google.com/search?client=firefox-b-d&q=TransparentLC

//输出:firefox-b-d
getQueryString('client');

//输出:TransparentLC
getQueryString('q');

要在访问网站时自动执行一段 JS,可以使用油猴脚本。各位 Firefox 或者 Chrome 的用户应该都听说过名字叫“Greasemonkey”或者”Tampermonkey”的扩展(国产套壳浏览器不配被称为浏览器(っ’-‘)╮),装上之后就可以写一段油猴脚本(或者叫“用户脚本”,实际上是 JS)然后指定在这个广告页面的域名 https://mbd.baidu.com/ 上应用~

// ==UserScript==
// @name         New Userscript
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        *://mbd.baidu.com/*
// @grant        none
// ==/UserScript==
​
(function () {
    'use strict';
    function getQueryString (name) {
        var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
        var r = window.location.search.substr(1).match(reg);
        if (r != null) {
            return unescape(r[2]);
        }
        return null;
    }
    location.href = decodeURIComponent(getQueryString('webUrl'));
})();

这个脚本的功能就是在打开广告页面的时候,从 webUrl 参数中提取真实地址,然后自动跳转。

直接把脚本写进 Tampermonkey 的模板里面了,标题说明作者版本号都没改(逃

新建脚本的时候把这一堆粘贴进去然后保存就可以了ε-(•́ω•̀๑)

(不过手机上编辑油猴脚本很麻烦的说……)

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
本文链接:https://akarin.dev/2019/04/26/baidu-search-result-redirection/