-
Notifications
You must be signed in to change notification settings - Fork 216
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[漏洞] get_videos()获得-352返回值 #691
Comments
使用最新的dev分支后,buvid确实可以成功激活,但get_videos()依然获得-352返回值,要不要把buvid4、b_nut、b_lsid、_uuid、buvid_fp作为cookie也传进去?在你的框架里我不知道怎么改出这个来...... PS:你有在 |
并没有遇到过,不过我也没激活过几次,最近就测试下而已... dev 分支 credential 已经支持自定义 Cookie 了 #692 ,直接 |
辛苦 虽然不是在这个项目测试的,但由你代码激活的cookie可以成功用于动态请求 PS:看到你激活buvid时发的指纹连uuid和ua都写固定值,网址都不改就能通过还能请求动态的时候我都惊了 |
get_videos 只靠激活的 buvid3 是不行的,buvid3 激活仅能直接解决用户动态获取问题,获取视频看 https://github.com/Nemo2011/bilibili-api/issues/595#issuecomment-1859074892,那些 |
那个给 dm 参数的 pr 我不知道过不过...随机能用?你看看改改?BAC 那边看不懂说法 |
如果我想让get_videos()的请求携带自定义cookie,你觉得我应该从哪里入手?我想试试自己攒一下 |
|
不是,我想问这个项目中自定义cookie涉及哪些关键部分...... |
哦天那,成了! |
现在 -352 是有新参数 |
简而言之就是这个提交的每个修改都是有必要的,不做这些修改这个接口就不起作用,所以我觉得应该合并这个提交 还有个问题,是不是所有json返回值被我拿到后都会删减了这一段:
仅保留了data内的结构 有办法让我拿到的返回值包括这一段,成为原始的返回值吗? |
有,你给每个 Api 的调用都加上 |
那个pr我不会合并的...迟早随机数会报风控,但我没空去扒拉最新的,可以来个人提个新的 |
如果要做 dev 模式的话,或许需要让程序不再因为服务器响应和json返回值失败而报错崩溃,直接返回服务器的http响应或json/编码的二进制数据(弹幕)(不过弹幕解码还是py方便,解码成json再返回吧......) |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>dm_img_list dm_img_inter</title>
</head>
<body>
<script>
console.log("----------------------1");
const { floor, random } = Math;
function f114i(a, b, i) {
const t = floor(random() * (114 * i));
return [3 * a + 2 * b + t, 4 * a - 5 * b + t, t];
}
function f114(a, b) {
const t = floor(random() * 114);
return [2 * a + 2 * b + 3 * t, 4 * a - b + t, t];
}
function f514(a, b) {
const t = floor(random() * 514);
return [3 * a + 2 * b + t, 4 * a - 4 * b + 2 * t, t];
}
const eventTypes = ["mousemove", "click"];
/**
* @param {Iterable<MouseEvent>} events 最近 50 次 `mousemove` 和 `click` 事件。
* @returns {string} `dm_img_list` 的值。
*/
function getDmImgList(events) {
return JSON.stringify(Array.from(events, (event, index) => {
const [x, y, z] = f114i(event.x, event.y, index);
return {
x,
y,
z,
timestamp: floor(event.timeStamp),
k: floor(random() * 67) + 60,
type: eventTypes.indexOf(event.type),
};
}));
}
const tagNames = [
"span", "div", "p", "a", "img", "input", "button", "ul", "ol", "li",
"h1", "h2", "h3", "h4", "h5", "h6", "form", "textarea", "select", "option",
"table", "tr", "td", "th", "label", "strong", "em", "section", "article",
];
/**
* @param {DOMRectReadOnly} windowBounds
* 初始全零,窗口大小和滚动位置都没变则保持全零;
* 窗口大小改变时 `width` 和 `height` 属性分别更新为 `innerWidth` 和 `innerHeight`;
* 滚动位置改变时 `x` 和 `y` 属性分别更新为 `scrollX` 和 `scrollY`。
* @param {Iterable<Element>} elements
* 初值是 `document.querySelectorAll("div[data-v-risk=fingerprint]")` 返回的两个元素;
* `mousemove` 或 `click` 时更新为只含事件的 `target` 一个元素。
* @returns {string} `dm_img_inter` 的值。
*/
function getDmImgInter(windowBounds, elements) {
return JSON.stringify({
ds: Array.from(elements, (element) => {
const bounds = element.getBoundingClientRect();
const [x1, y1, z1] = f114(bounds.y | 0, bounds.x | 0);
const [x2, y2, z2] = f514(bounds.width | 0, bounds.height | 0);
return {
t: tagNames.indexOf(element.tagName.toLowerCase()) + 1,
c: btoa(element.className).slice(0, -2),
p: [x1, z1, y1],
s: [z2, x2, y2],
};
}),
wh: f114(windowBounds.width, windowBounds.height),
of: f514(windowBounds.y, windowBounds.x),
});
}
//-----------------------------------------------
//运行测试
function updateOnResize() {//窗口更新时调用
// 为了演示目的,假设有一些模拟的事件和元素数据
const mockEvents = [
{ x: 10, y: 20, timeStamp: 12345, type: "mousemove" },
{ x: 30, y: 40, timeStamp: 67890, type: "click" }
];
const mockWindowBounds = { width: 800, height: 600, x: 100, y: 50 };
const mockElements = [
{ tagName: "div", className: "example-class", getBoundingClientRect: () => ({ x: 50, y: 60, width: 200, height: 150 }) },
{ tagName: "span", className: "another-class", getBoundingClientRect: () => ({ x: 80, y: 120, width: 100, height: 80 }) }
];
// 调用函数并打印最终输出
const dmImgList = getDmImgList(mockEvents);
console.log("dm_img_list:", dmImgList);
const dmImgInter = getDmImgInter(mockWindowBounds, mockElements);
console.log("dm_img_inter:", dmImgInter);
}
// 在窗口大小改变时调用
window.addEventListener('resize', updateOnResize);
// 初始化调用一次
updateOnResize();
</script>
</body>
</html> 但还好,需要完全合法指纹的一天还没有到来 |
有这种需求自己打断点就好了,说真的不打算深入,凑合 |
"迟早随机数会报风控"...... 如果喜欢原理正确可以在注释写好正当的实现思路以供后人参考,但爬虫不就是短时间反复对抗的过程吗?在已知短时间内无法完成原理正确的代码的同时,顶着功能不能用的现状将已经无法使用的优雅代码保留在为实用目标编写的代码库里到底有什么好处呢? |
不置评价,除非你打算持续更进这个风控继续修,那我非常认同
|
目前我的项目依赖于本项目的buvid激活实现,也依赖本项目的get_videos,所以get_videos再出问题的话我会先尝试修复get_videos,直到难度让我考虑其他方法或者放弃使用这个API。因此只要我还使用本项目,我可以保证我的能跑这里也能跑,这样行吗 |
当前该 pr 能成功运行吗?以及 #699 (comment) |
我做了测试,截至当前DEV分支合并 #680 后运行 |
那这是啥 #699 (comment) 前言不搭后语?
|
那时我查了我自己项目的等效函数实现和web端的API实现,确实有 其次我在昨晚下载了当前最新DEV分支ZIP包,手工合并 #680 中的有效代码,并测试了 我使用本项目DEV分支几个月前的版本以同样方法手工合并 #680 中的有效代码后,一直顺利使用 |
4fb2ef3 不予置评...加油 |
那么现在这个问题解决了吗 |
此问题从20号左右又重新出现了 |
运行如上代码出现了如下错误
The text was updated successfully, but these errors were encountered: