VK video download

Позволяет скачивать видео из вк, даже если это видео переслали вам сообщением из закрытой группы. Кнопка скачать появляется при нажатии правой кнопки мыши на видео

  1. // ==UserScript==
  2. // @name VK video download
  3. // @namespace https://github.com/DaniilAfendulov/VK-video-dowload
  4. // @version 0.1
  5. // @description Позволяет скачивать видео из вк, даже если это видео переслали вам сообщением из закрытой группы. Кнопка скачать появляется при нажатии правой кнопки мыши на видео
  6. // @author Daniil Afendulov
  7. // @include https://vk.com/*
  8. // @include https://m.vk.com/*
  9. // @include https://pvv4.vkuservideo.net/*
  10. // @license MIT
  11. // ==/UserScript==
  12.  
  13.  
  14. (function() {
  15. 'use strict';
  16. // Your code here...
  17. if(window.location.hostname === "m.vk.com" && window.opener.location.hostname === "vk.com") vkm();
  18. if(window.location.hostname === "pvv4.vkuservideo.net" ) pvv4();
  19. if(window.location.hostname === "vk.com") vk();
  20. })();
  21.  
  22. function vk() {
  23. window.addEventListener('message', function(event) {
  24. if (event.source.location.hostname === "m.vk.com") {
  25. let src = event.data;
  26. alert('m.vk.com');
  27. window.location = src;
  28. return;
  29. }
  30. });
  31.  
  32. var el;
  33. var timerId = setInterval(pollDOM, 2000);
  34. function pollDOM () {
  35. console.log('tick');
  36. el = document.querySelector("#video_player > div > div.videoplayer_ui > div.videoplayer_context_menu.hidden");
  37. if (!el) {
  38. el = document.querySelector("#video_player > div > div.videoplayer_ui > div.videoplayer_context_menu");
  39. }
  40. if (el) setBtn();
  41. }
  42.  
  43.  
  44.  
  45. function setBtn() {
  46. //clearInterval(timerId);
  47. let div = document.querySelector('#tmr');
  48. if(div) return;
  49.  
  50. div = document.createElement('div');
  51. div.className = "_item";
  52. div.id = 'tmr';
  53. div.innerHTML = "скачать";
  54. div.onclick = handler;
  55. el.prepend(div);
  56. }
  57.  
  58.  
  59. function handler() {
  60. var ourl = window.location.toString();
  61. var url = ourl;
  62. url = url.replace('https://','https://m.');
  63. let index = url.indexOf('video');
  64. if(index === -1) return;
  65.  
  66. url = url.slice(0,"https://m.vk.com/".length) + url.slice(index);
  67. url = url.replace('%2F','?list=');
  68. index = url.indexOf('%2F');
  69. if(index === -1) return;
  70. url = url.slice(0,index);
  71. var win = window.open(url);
  72. }
  73. }
  74.  
  75. function vkm() {
  76. window.onload = function() {
  77. let src = window.location.pathname;
  78. console.log(src);
  79. src = '#'+src.substring(1)+" > div.VideoPage__video > video > source:nth-child(2)";
  80. console.log(src);
  81. src = document.querySelector(src).src;
  82. src = src.substring(0, src.indexOf('.mp4')+4);
  83. let win = window.opener;
  84. win.postMessage(src, '*');
  85. window.close();
  86. }
  87. }
  88.  
  89. function pvv4() {
  90. window.onload = function() {
  91. let video = document.querySelector("body > video > source");
  92. let a = document.createElement('a');
  93. a.href = video.src;
  94. a.download = 'video.mp4';
  95. a.click();
  96. window.history.back();
  97. }
  98. }