视频解析全网VIP视频免费破解【长期更新,放心使用】

全网VIP视频免费破解【长期更新,放心使用】。支持:腾讯、爱奇艺、优酷、芒果、Bilibili、pptv、乐视等其它网站;

  1. // ==UserScript==
  2. // @name 视频解析全网VIP视频免费破解【长期更新,放心使用】
  3. // @namespace http://tampermonkey.net/
  4. // @version 7.7.3
  5. // @description 全网VIP视频免费破解【长期更新,放心使用】。支持:腾讯、爱奇艺、优酷、芒果、Bilibili、pptv、乐视等其它网站;
  6. // @icon https://cdnjson.com/images/2024/03/08/vip-138322c97376fb53b.png
  7. // @author w__yi
  8. // @match *://*.youku.com/*
  9. // @match *://*.iqiyi.com/*
  10. // @match *://*.iq.com/*
  11. // @match *://*.le.com/*
  12. // @match *://v.qq.com/*
  13. // @match *://m.v.qq.com/*
  14. // @match *://*.tudou.com/*
  15. // @match *://*.mgtv.com/*
  16. // @match *://tv.sohu.com/*
  17. // @match *://film.sohu.com/*
  18. // @match *://*.1905.com/*
  19. // @match *://*.bilibili.com/*
  20. // @match *://*.pptv.com/*
  21.  
  22. // @connect api.bilibili.com
  23. // @grant unsafeWindow
  24. // @grant GM_addStyle
  25. // @grant GM_openInTab
  26. // @grant GM_getValue
  27. // @grant GM_setValue
  28. // @grant GM_xmlhttpRequest
  29. // @grant GM_log
  30. // @charset UTF-8
  31. // @license GPL License
  32. // ==/UserScript==
  33. const util = (function () {
  34. function findTargetElement(targetContainer) {
  35. const body = window.document;
  36. let tabContainer;
  37. let tryTime = 0;
  38. const maxTryTime = 120;
  39. let startTimestamp;
  40. return new Promise((resolve, reject) => {
  41. function tryFindElement(timestamp) {
  42. if (!startTimestamp) {
  43. startTimestamp = timestamp;
  44. }
  45. const elapsedTime = timestamp - startTimestamp;
  46. if (elapsedTime >= 500) {
  47. GM_log("查找元素:" + targetContainer + ",第" + tryTime + "次");
  48. tabContainer = body.querySelector(targetContainer);
  49. if (tabContainer) {
  50. resolve(tabContainer);
  51. } else if (++tryTime === maxTryTime) {
  52. reject();
  53. } else {
  54. startTimestamp = timestamp;
  55. }
  56. }
  57. if (!tabContainer && tryTime < maxTryTime) {
  58. requestAnimationFrame(tryFindElement);
  59. }
  60. }
  61. requestAnimationFrame(tryFindElement);
  62. });
  63. }
  64. function urlChangeReload() {
  65. const oldHref = window.location.href;
  66. let interval = setInterval(() => {
  67. let newHref = window.location.href;
  68. if (oldHref !== newHref) {
  69. clearInterval(interval);
  70. window.location.reload();
  71. }
  72. }, 500);
  73. }
  74. function reomveVideo() {
  75. setInterval(() => {
  76. for (let video of document.getElementsByTagName("video")) {
  77. if (video.src) {
  78. video.removeAttribute("src");
  79. video.muted = true;
  80. video.load();
  81. video.pause();
  82. }
  83. }
  84. }, 500);
  85. }
  86. function syncRequest(option) {
  87. return new Promise((resolve, reject) => {
  88. option.onload = (res) => {
  89. resolve(res);
  90. };
  91. option.onerror = (err) => {
  92. reject(err);
  93. };
  94. GM_xmlhttpRequest(option);
  95. });
  96. }
  97. return {
  98. req: (option) => syncRequest(option),
  99. findTargetEle: (targetEle) => findTargetElement(targetEle),
  100. urlChangeReload: () => urlChangeReload(),
  101. reomveVideo: () => reomveVideo()
  102. }
  103. })();
  104. const superVip = (function () {
  105. const _CONFIG_ = {
  106. isMobile: navigator.userAgent.match(/(Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini)/i),
  107. currentPlayerNode: null,
  108. vipBoxId: 'vip_jx_box' + Math.ceil(Math.random() * 100000000),
  109. flag: "flag_vip",
  110. autoPlayerKey: "auto_player_key" + window.location.host,
  111. autoPlayerVal: "auto_player_value_" + window.location.host,
  112. videoParseList: [
  113. {"name": "综合", "type": "1,3", "url": "https://www.kedou.life/video-tool/movie/getRawDynamicPlayUrl?url="},
  114. {"name": "虾米", "type": "1,3", "url": "https://jx.xmflv.com/?url="},
  115. {"name": "YT", "type": "1,3", "url": "https://jx.yangtu.top/?url="},
  116. {"name": "夜幕", "type": "1,3", "url": "https://www.yemu.xyz/?url="},
  117. {"name": "CK", "type": "1,3", "url": "https://www.ckplayer.vip/jiexi/?url="},
  118. {"name": "yparse", "type": "1,3", "url": "https://jx.yparse.com/index.php?url="},
  119. {"name": "爱豆", "type": "1,3", "url": "https://jx.aidouer.net/?url="},
  120. {"name": "夜幕", "type": "1,3", "url": "https://www.yemu.xyz/?url="},
  121.  
  122. {"name": "虾米", "type": "1,3", "url": "https://jx.xmflv.com/?url="},
  123. {"name": "全民", "type": "1,3", "url": "https://43.240.74.102:4433?url="},
  124. ],
  125. playerContainers: [
  126. {
  127. host: "v.qq.com",
  128. container: "#mod_player,#player-container,.container-player",
  129. name: "Default",
  130. displayNodes: ["#mask_layer", ".mod_vip_popup", "#mask_layer", ".panel-tip-pay"]
  131. },
  132. {
  133. host: "m.v.qq.com",
  134. container: ".mod_player,#player",
  135. name: "Default",
  136. displayNodes: [".mod_vip_popup", "[class^=app_],[class^=app-],[class*=_app_],[class*=-app-],[class$=_app],[class$=-app]", "div[dt-eid=open_app_bottom]", "div.video_function.video_function_new", "a[open-app]", "section.mod_source", "section.mod_box.mod_sideslip_h.mod_multi_figures_h,section.mod_sideslip_privileges,section.mod_game_rec", ".at-app-banner"]
  137. },
  138. {host: "w.mgtv.com", container: "#mgtv-player-wrap", name: "Default", displayNodes: []},
  139. {host: "www.mgtv.com", container: "#mgtv-player-wrap", name: "Default", displayNodes: []},
  140. {
  141. host: "m.mgtv.com",
  142. container: ".video-area",
  143. name: "Default",
  144. displayNodes: ["div[class^=mg-app]", ".video-area-bar", ".open-app-popup"]
  145. },
  146. {host: "www.bilibili.com", container: "#player_module,#bilibiliPlayer,#bilibili-player", name: "Default", displayNodes: []},
  147. {host: "m.bilibili.com", container: ".player-wrapper,.player-container,.mplayer", name: "Default", displayNodes: []},
  148. {host: "www.iqiyi.com", container: "#flashbox", name: "Default", displayNodes: ["#playerPopup", "div[class^=qy-header-login-pop]", "section[class^=modal-cover_]" ,".toast"]},
  149. {
  150. host: "m.iqiyi.com",
  151. container: ".m-video-player-wrap",
  152. name: "Default",
  153. displayNodes: ["div.m-iqyGuide-layer", "a[down-app-android-url]", "[name=m-extendBar]", "[class*=ChannelHomeBanner]", "section.m-hotWords-bottom"]
  154. },
  155. {host: "www.iq.com", container: ".intl-video-wrap", name: "Default", displayNodes: []},
  156. {host: "v.youku.com", container: "#player", name: "Default", displayNodes: ["#iframaWrapper", "#checkout_counter_mask", "#checkout_counter_popup"]},
  157. {
  158. host: "m.youku.com",
  159. container: "#player,.h5-detail-player",
  160. name: "Default",
  161. displayNodes: [".callEnd_box", ".h5-detail-guide", ".h5-detail-vip-guide"]
  162. },
  163. {host: "tv.sohu.com", container: "#player", name: "Default", displayNodes: []},
  164. {host: "film.sohu.com", container: "#playerWrap", name: "Default", displayNodes: []},
  165. {host: "www.le.com", container: "#le_playbox", name: "Default", displayNodes: []},
  166. {host: "video.tudou.com", container: ".td-playbox", name: "Default", displayNodes: []},
  167. {host: "v.pptv.com", container: "#pptv_playpage_box", name: "Default", displayNodes: []},
  168. {host: "vip.pptv.com", container: ".w-video", name: "Default", displayNodes: []},
  169. {host: "www.wasu.cn", container: "#flashContent", name: "Default", displayNodes: []},
  170. {host: "www.acfun.cn", container: "#player", name: "Default", displayNodes: []},
  171. {host: "vip.1905.com", container: "#player,#vodPlayer", name: "Default", displayNodes: []},
  172. {host: "www.1905.com", container: "#player,#vodPlayer", name: "Default", displayNodes: []},
  173. ]
  174. };
  175. class BaseConsumer {
  176. constructor() {
  177. this.parse = () => {
  178. util.findTargetEle('body')
  179. .then((container) => this.preHandle(container))
  180. .then((container) => this.generateElement(container))
  181. .then((container) => this.bindEvent(container))
  182. .then((container) => this.autoPlay(container))
  183. .then((container) => this.postHandle(container));
  184. }
  185. }
  186. preHandle(container) {
  187. _CONFIG_.currentPlayerNode.displayNodes.forEach((item, index) => {
  188. util.findTargetEle(item)
  189. .then((obj) => obj.style.display = 'none')
  190. .catch(e => console.warn("不存在元素", e));
  191. });
  192. return new Promise((resolve, reject) => resolve(container));
  193. }
  194. generateElement(container) {
  195. GM_addStyle(`
  196. #${_CONFIG_.vipBoxId} {cursor:pointer; position:fixed; top:120px; left:0px; z-index:9999999; text-align:left;}
  197. #${_CONFIG_.vipBoxId} .img_box{width:32px; height:32px;line-height:32px;text-align:center;background-color:#f8a441;margin:10px 0px;}
  198. #${_CONFIG_.vipBoxId} .vip_list {display:none; position:absolute; border-radius:5px; left:32px; top:0; text-align:center; background-color: #3f4149; border:1px solid white;padding:10px 0px; width:380px; max-height:400px; overflow-y:auto;}
  199. #${_CONFIG_.vipBoxId} .vip_list li{border-radius:2px; font-size:12px; color:#DCDCDC; text-align:center; width:calc(25% - 14px); line-height:21px; float:left; border:1px solid gray; padding:0 4px; margin:4px 2px;overflow:hidden;white-space: nowrap;text-overflow: ellipsis;-o-text-overflow:ellipsis;}
  200. #${_CONFIG_.vipBoxId} .vip_list li:hover{color:#1c84c6; border:1px solid #1c84c6;}
  201. #${_CONFIG_.vipBoxId} .vip_list ul{padding-left: 10px;}
  202. #${_CONFIG_.vipBoxId} .vip_list::-webkit-scrollbar{width:5px; height:1px;}
  203. #${_CONFIG_.vipBoxId} .vip_list::-webkit-scrollbar-thumb{box-shadow:inset 0 0 5px rgba(0, 0, 0, 0.2); background:#A8A8A8;}
  204. #${_CONFIG_.vipBoxId} .vip_list::-webkit-scrollbar-track{box-shadow:inset 0 0 5px rgba(0, 0, 0, 0.2); background:#F1F1F1;}
  205. #${_CONFIG_.vipBoxId} li.selected{color:#1c84c6; border:1px solid #1c84c6;}
  206. `);
  207. if (_CONFIG_.isMobile) {
  208. GM_addStyle(`
  209. #${_CONFIG_.vipBoxId} {top:300px;}
  210. #${_CONFIG_.vipBoxId} .vip_list {width:300px;}
  211. `);
  212. }
  213. let type_1_str = "";
  214. let type_2_str = "";
  215. let type_3_str = "";
  216. _CONFIG_.videoParseList.forEach((item, index) => {
  217. if (item.type.includes("1")) {
  218. type_1_str += `<li class="nq-li" title="${item.name}1" data-index="${index}">${item.name}</li>`;
  219. }
  220. if (item.type.includes("2")) {
  221. type_2_str += `<li class="tc-li" title="${item.name}" data-index="${index}">${item.name}</li>`;
  222. }
  223. if (item.type.includes("3")) {
  224. type_3_str += `<li class="tc-li" title="${item.name}" data-index="${index}">${item.name}</li>`;
  225. }
  226. });
  227. let autoPlay = !!GM_getValue(_CONFIG_.autoPlayerKey, null) ? "开" : "关";
  228. $(container).append(`
  229. <div id="${_CONFIG_.vipBoxId}">
  230. <div class="vip_icon">
  231. <div class="img_box" title="选择解析源" style="color:yellow;font-size:16px;font-weight:bold;border-radius:5px;"><span style="color: yellow;">V</span>I<span style="color: yellow;">P</span></div>
  232. <div class="vip_list">
  233. <div>
  234. <h3 style="color:#1c84c6; font-weight: bold; font-size: 16px; padding:5px 0px;">[内嵌播放]</h3>
  235. <ul>
  236. ${type_1_str}
  237. <div style="clear:both;"></div>
  238. </ul>
  239. </div>
  240. <div>
  241. <h3 style="color:#1c84c6; font-weight: bold; font-size: 16px; padding:5px 0px;">[弹窗播放带选集]</h3>
  242. <ul>
  243. ${type_2_str}
  244. <div style="clear:both;"></div>
  245. </ul>
  246. </div>
  247. <div>
  248. <h3 style="color:#1c84c6; font-weight: bold; font-size: 16px; padding:5px 0px;">[弹窗播放不带选集]</h3>
  249. <ul>
  250. ${type_3_str}
  251. <div style="clear:both;"></div>
  252. </ul>
  253. </div>
  254. <div style="text-align:left;color:#FFF;font-size:10px;padding:0px 10px;margin-top:10px;">
  255. <b>自动解析功能说明:</b>
  256. <br>&nbsp;&nbsp;1、自动解析功能默认关闭(自动解析只支持内嵌播放源)
  257. <br>&nbsp;&nbsp;2、开启自动解析,网页打开后脚本将根据当前选中的解析源自动解析视频。如解析失败,请手动选择不同的解析源尝试
  258. <br>&nbsp;&nbsp;3、没有选中解析源将随机选取一个
  259. <br>&nbsp;&nbsp;4、如某些网站有会员可以关闭自动解析功能
  260. </div>
  261. </div>
  262. </div>
  263. <div class="img_box" id="vip_auto" style="color:white;font-size:16px;font-weight:bold;border-radius:5px;" title="是否打开自动解析。若自动解析失败,请手动选择其它接口尝试!!">${autoPlay}</div>
  264. </div>`);
  265. return new Promise((resolve, reject) => resolve(container));
  266. }
  267. bindEvent(container) {
  268. const vipBox = $(`#${_CONFIG_.vipBoxId}`);
  269. if (_CONFIG_.isMobile) {
  270. vipBox.find(".vip_icon").on("click", () => vipBox.find(".vip_list").toggle());
  271. } else {
  272. vipBox.find(".vip_icon").on("mouseover", () => vipBox.find(".vip_list").show());
  273. vipBox.find(".vip_icon").on("mouseout", () => vipBox.find(".vip_list").hide());
  274. }
  275. let _this = this;
  276. vipBox.find(".vip_list .nq-li").each((liIndex, item) => {
  277. item.addEventListener("click", () => {
  278. const index = parseInt($(item).attr("data-index"));
  279. GM_setValue(_CONFIG_.autoPlayerVal, index);
  280. GM_setValue(_CONFIG_.flag, "true");
  281. _this.showPlayerWindow(_CONFIG_.videoParseList[index]);
  282. vipBox.find(".vip_list li").removeClass("selected");
  283. $(item).addClass("selected");
  284. });
  285. });
  286. vipBox.find(".vip_list .tc-li").each((liIndex, item) => {
  287. item.addEventListener("click", () => {
  288. const index = parseInt($(item).attr("data-index"));
  289. const videoObj = _CONFIG_.videoParseList[index];
  290. let url = videoObj.url + window.location.href;
  291. GM_openInTab(url, {active: true, insert: true, setParent: true});
  292. });
  293. });
  294. //右键移动位置
  295. vipBox.mousedown(function (e) {
  296. if (e.which !== 3) {
  297. return;
  298. }
  299. e.preventDefault()
  300. vipBox.css("cursor", "move");
  301. const positionDiv = $(this).offset();
  302. let distenceX = e.pageX - positionDiv.left;
  303. let distenceY = e.pageY - positionDiv.top;
  304. $(document).mousemove(function (e) {
  305. let x = e.pageX - distenceX;
  306. let y = e.pageY - distenceY;
  307. const windowWidth = $(window).width();
  308. const windowHeight = $(window).height();
  309. if (x < 0) {
  310. x = 0;
  311. } else if (x > windowWidth - vipBox.outerWidth(true) - 100) {
  312. x = windowWidth - vipBox.outerWidth(true) - 100;
  313. }
  314. if (y < 0) {
  315. y = 0;
  316. } else if (y > windowHeight - vipBox.outerHeight(true)) {
  317. y = windowHeight - vipBox.outerHeight(true);
  318. }
  319. vipBox.css("left", x);
  320. vipBox.css("top", y);
  321. });
  322. $(document).mouseup(function () {
  323. $(document).off('mousemove');
  324. vipBox.css("cursor", "pointer");
  325. });
  326. $(document).contextmenu(function (e) {
  327. e.preventDefault();
  328. })
  329. });
  330. return new Promise((resolve, reject) => resolve(container));
  331. }
  332. autoPlay(container) {
  333. const vipBox = $(`#${_CONFIG_.vipBoxId}`);
  334. vipBox.find("#vip_auto").on("click", function () {
  335. if (!!GM_getValue(_CONFIG_.autoPlayerKey, null)) {
  336. GM_setValue(_CONFIG_.autoPlayerKey, null);
  337. $(this).html("关");
  338. $(this).attr("title", "是否打开自动解析。若自动解析失败,请手动选择其它接口尝试!!");
  339. } else {
  340. GM_setValue(_CONFIG_.autoPlayerKey, "true");
  341. $(this).html("开");
  342. }
  343. setTimeout(function () {
  344. window.location.reload();
  345. }, 200);
  346. });
  347. if (!!GM_getValue(_CONFIG_.autoPlayerKey, null)) {
  348. this.selectPlayer(container);
  349. }
  350. return new Promise((resolve, reject) => resolve(container));
  351. }
  352. selectPlayer(container) {
  353. let index = GM_getValue(_CONFIG_.autoPlayerVal, 2);
  354. let autoObj = _CONFIG_.videoParseList[index];
  355. let _th = this;
  356. if (autoObj.type.includes("1")) {
  357. setTimeout(function () {
  358. _th.showPlayerWindow(autoObj);
  359. const vipBox = $(`#${_CONFIG_.vipBoxId}`);
  360. vipBox.find(`.vip_list [title="${autoObj.name}1"]`).addClass("selected");
  361. $(container).find("#vip_auto").attr("title", `自动解析源:${autoObj.name}`);
  362. }, 2500);
  363. }
  364. }
  365. showPlayerWindow(videoObj) {
  366. util.findTargetEle(_CONFIG_.currentPlayerNode.container)
  367. .then((container) => {
  368. const type = videoObj.type;
  369. let url = videoObj.url + window.location.href;
  370. if (type.includes("1")) {
  371. util.reomveVideo();
  372. $(container).empty();
  373. $(container).empty();
  374. let iframeDivCss = "width:100%;height:100%;z-index:999999;";
  375. if (_CONFIG_.isMobile) {
  376. iframeDivCss = "width:100%;height:220px;z-index:999999;";
  377. }
  378. if (_CONFIG_.isMobile && window.location.href.indexOf("iqiyi.com") !== -1) {
  379. iframeDivCss = "width:100%;height:220px;z-index:999999;margin-top:-56.25%;";
  380. }
  381. $(container).append(`<div style="${iframeDivCss}"><iframe id="iframe-player-4a5b6c" src="${url}" style="border:none;" allowfullscreen="true" width="100%" height="100%"></iframe></div>`);
  382. }
  383. });
  384. }
  385. postHandle(container) {
  386. if (!!GM_getValue(_CONFIG_.autoPlayerKey, null)) {
  387. util.urlChangeReload();
  388. } else {
  389. let oldHref = window.location.href;
  390. let interval = setInterval(() => {
  391. let newHref = window.location.href;
  392. if (oldHref !== newHref) {
  393. oldHref = newHref;
  394. if (!!GM_getValue(_CONFIG_.flag, null)) {
  395. clearInterval(interval);
  396. window.location.reload();
  397. }
  398. }
  399. }, 1000);
  400. }
  401. }
  402. }
  403. class DefaultConsumer extends BaseConsumer {
  404. }
  405. return {
  406. start: () => {
  407. GM_setValue(_CONFIG_.flag, null);
  408. let mallCase = 'Default';
  409. let playerNode = _CONFIG_.playerContainers.filter(value => value.host === window.location.host);
  410. if (playerNode === null || playerNode.length <= 0) {
  411. console.warn(window.location.host + "该网站暂不支持,请联系作者,作者将会第一时间处理(注意:请记得提供有问题的网址)");
  412. return;
  413. }
  414. _CONFIG_.currentPlayerNode = playerNode[0];
  415. mallCase = _CONFIG_.currentPlayerNode.name;
  416. const targetConsumer = eval(`new ${mallCase}Consumer`);
  417. targetConsumer.parse();
  418. }
  419. }
  420. })();
  421. (function () {
  422. superVip.start();
  423. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址