今天查东西的时候以外发现一个不错的资源(dao ban)站:
里。
网站的搜索结果页面的 url 如下:
https://www.yingshicang.com/vodsearch/-------------/?wd=%E8%97%8F%E6%B5%B7%E4%BC%A0
所以一开始就简单将其作为跳转外链加到脚本里,但实际发现并不能正常跳转,打开的新页面不能正常显示内容。
查看了一下调试信息,发现很可能是网站监测了referer
头信息,第三方网站跳转不会正常加载页面。
查了一下,Referer
头信息无法正常修改,但是可以用油猴脚本的 API 修改并完成 HTTP 请求:
// ==UserScript==
// @name Bypass Referer Demo
// @namespace your-namespace
// @version 1.0
// @match https://third-party-site.com/*
// @grant GM_xmlhttpRequest
// ==/UserScript==
(function() {
'use strict';
// 修改所有指向目标网站的链接行为
document.querySelectorAll('a[href*="yingshicang.com"]').forEach(link => {
link.addEventListener('click', function(e) {
e.preventDefault();
const targetUrl = this.href;
// 发送自定义请求
GM_xmlhttpRequest({
method: "GET",
url: targetUrl,
headers: {
"Referer": "https://www.yingshicang.com" // 伪装合法来源
},
onload: function(response) {
// 将响应内容注入新窗口或当前页面
const newWindow = window.open();
newWindow.document.write(response.responseText);
}
});
});
});
})();
但试了一下,并不能正常工作。所以决定换一个思路,第三方链接只跳转到主页,然后用另一个油猴脚本模拟用户在搜索框填写关键字并进行搜索。
搜索关键字通过 URL 的查询参数传递,通过以下 API 获取:
const urlParams = new URLSearchParams(window.location.search);
const keyword = urlParams.get('auto_search_key');
实际测试了一下,发现该网站的开发者禁用了URLSearchParams
这个 API,甚至在控制台输出信息中写了你懂的太多了
之类的alert
信息。
不过这很容易绕过去,让 AI 写一个手撕参数的替代版本:
const url = 'https://www.yingshicang.com/vodsearch/-------------/?wd=123';
// 提取 wd 的值
function getWdParam(url) {
try {
// 如果传入的是完整 URL,可以用 URL 对象解析
const urlObj = new URL(url);
return urlObj.searchParams.get('wd');
} catch (e) {
// 如果 URL 格式不完整,直接解析参数部分
const params = new URLSearchParams(url.split('?')[1] || '');
return params.get('wd');
}
}
console.log(getWdParam(url)); // 输出 "123"
再调试了几轮,就能正常使用了。觉得这个过程有点意思,感觉目标网站的开发者主要还是防止被爬流,顺带防范了一下我们这种第三方跳转...但也就是拉高了一点点难度罢了。
有兴趣的可以试试我的油猴脚本:
文章评论