Pixiv 增强

屏蔽广告, 查看热门图片, 按收藏数搜索, 替换大图, 下载gif、多图, 显示画师id、画师背景图链接, 自动加载评论。github:https://github.com/Ahaochan/Tampermonkey,欢迎star和fork。

当前为 2017-11-05 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Pixiv 增强
  3. // @namespace https://github.com/Ahaochan/Tampermonkey
  4. // @version 0.0.7
  5. // @description 屏蔽广告, 查看热门图片, 按收藏数搜索, 替换大图, 下载gif、多图, 显示画师id、画师背景图链接, 自动加载评论。github:https://github.com/Ahaochan/Tampermonkey,欢迎star和fork。
  6. // @author Ahaochan
  7. // @match https://*.pixiv.net*
  8. // @match https://*.pixiv.net/*
  9. // @connect i.pximg.net
  10. // @grant GM_xmlhttpRequest
  11. // @grant GM_setClipboard
  12. // @require https://code.jquery.com/jquery-2.2.4.min.js
  13. // @require https://cdn.bootcss.com/jszip/3.1.4/jszip.min.js
  14. // @require https://cdn.bootcss.com/FileSaver.js/1.3.2/FileSaver.min.js
  15. // ==/UserScript==
  16.  
  17. (function ($) {
  18. 'use strict';
  19.  
  20. // 删除广告、查看热门图片
  21. (function () {
  22. // 删除广告
  23. $('._premium-lead-tag-search-bar').hide();
  24. // 查看热门图片
  25. $('.popular-introduction-overlay').hide();
  26. })();
  27.  
  28. // 按收藏数搜索
  29. (function () {
  30. $('.navigation-menu-right').append(
  31. '<div class="menu-group">' +
  32. ' <a class="menu-item js-click-trackable-later">' +
  33. ' <img class="_howto-icon" src="https://source.pixiv.net/www/images/knowhow/icon/howto-brush.svg?20171004">' +
  34. ' <span class="label">收藏人数:</span>' +
  35. ' <select id="ahao_favourite_num_select">' +
  36. ' <option value=""></option>' +
  37. ' <option value="10000users入り">10000users入り</option>' +
  38. ' <option value="5000users入り" > 5000users入り</option>' +
  39. ' <option value="1000users入り" > 1000users入り</option>' +
  40. ' <option value="500users入り" > 500users入り</option>' +
  41. ' <option value="300users入り" > 300users入り</option>' +
  42. ' <option value="100users入り" > 100users入り</option>' +
  43. ' <option value="50users入り" > 50users入り</option>' +
  44. ' </select>' +
  45. ' </a>' +
  46. '</div>');
  47.  
  48. // 如果已经有搜索字符串就在改变选项时直接搜索
  49. $('#ahao_favourite_num_select').on('change', function () {
  50. var $text = $('#suggest-input');
  51. if (!!$text.val()) {
  52. $('#suggest-container').submit();
  53. }
  54. });
  55.  
  56. // 在提交搜索前处理搜索关键字
  57. $('#suggest-container').submit(function () {
  58. var $text = $('#suggest-input');
  59. var $favourite = $('#ahao_favourite_num_select');
  60. // 去除旧的搜索选项
  61. $text.val($text.val().replace(/\d*users入り/, ''));
  62. // 去除多余空格
  63. while ($text.val().indexOf(' ') > -1) {
  64. $text.val($text.val().replace(' ', ' '));
  65. }
  66. // 添加新的搜索选项
  67. $text.val($text.val() + ' ' + $favourite.val());
  68. });
  69. })();
  70.  
  71. // 下载图片
  72. (function () {
  73. if (!(location.href.indexOf('member_illust.php') !== -1)) {
  74. return;
  75. }
  76. // 获取参数
  77. var param = $('.bookmark_modal_thumbnail')
  78. .attr('data-src')
  79. .match(/img-master\/img([\s\S]*?)_/)
  80. [1];
  81.  
  82. // 单图、多图、gif图三种模式
  83. var moreMode = !!$('a.read-more').length;
  84. var gifMode = !!$('div ._ugoku-illust-player-container').length;
  85. var singleMode = !moreMode && !gifMode;
  86.  
  87. // 替换单图为大图
  88. (function () {
  89. if (!singleMode) {
  90. return;
  91. }
  92. console.log('加载单图模式');
  93.  
  94. var img = $('.original-image').attr('data-src');
  95. $('div.works_display')
  96. .find('img')
  97. .attr('src', img)
  98. .css('width', '100%');
  99. })();
  100.  
  101. // 下载动图
  102. (function () {
  103. if (!gifMode) {
  104. return;
  105. }
  106. console.log('加载gif图模式');
  107.  
  108. var url = 'https://i.pximg.net/img-zip-ugoira/img' + param + '_ugoira600x600.zip';
  109. // 添加下载按钮
  110. $('div .bookmark-container').append(
  111. '<a href="' + url + '" class="_bookmark-toggle-button add-bookmark">' +
  112. ' <span class="bookmark-icon"></span><span class="description">下载动图</span>' +
  113. '</a>');
  114. })();
  115.  
  116. // 下载多图
  117. (function () {
  118. if (!moreMode) {
  119. return;
  120. }
  121. console.log('加载多图模式');
  122.  
  123. var downloaded = 0; // 下载完成数量
  124. var num = $('a.read-more').text().match(/\d+/); // 下载目标数量
  125.  
  126. // 添加下载按钮
  127. var $a = $('<a class="_bookmark-toggle-button add-bookmark">' +
  128. ' <span class="bookmark-icon"></span><span class="description">下载失败</span>' +
  129. '</a>');
  130. $a.on('click', function () {
  131. if (downloaded < num) {
  132. return;
  133. }
  134. zip.generateAsync({type: "blob", base64: true})
  135. .then(function (content) {
  136. saveAs(content, "pic.zip"); // see FileSaver.js'
  137. });
  138. });
  139. $('div .bookmark-container').append($a);
  140.  
  141.  
  142. var zip = new JSZip();
  143. for (var i = 0; i < num; i++) {
  144. (function (index) {
  145. var url = 'https://i.pximg.net/img-master/img' + param + '_p' + index + '_master1200.jpg';
  146. GM_xmlhttpRequest({
  147. method: 'GET',
  148. headers: {referer: 'https://www.pixiv.net/'},
  149. overrideMimeType: 'text/plain; charset=x-user-defined',
  150. url: url,
  151. onload: function (xhr) {
  152. var r = xhr.responseText,
  153. data = new Uint8Array(r.length),
  154. i = 0;
  155. while (i < r.length) {
  156. data[i] = r.charCodeAt(i);
  157. i++;
  158. }
  159.  
  160. var blob = new Blob([data], {type: 'image/jpeg'});
  161.  
  162. downloaded++;
  163. zip.file('pic_' + index + '.jpg', blob, {binary: true});
  164.  
  165. if (downloaded == num) {
  166. $a.find('.description').text('下载多图(' + downloaded + '/' + num + ')');
  167. } else {
  168. $a.find('.description').text('下载中: ' + downloaded + '/' + num);
  169. }
  170. }
  171. });
  172. })(i);
  173. }
  174. })();
  175. })();
  176.  
  177. // 显示画师id和背景图
  178. (function () {
  179. if (!(location.href.indexOf('member_illust.php') !== -1 ||
  180. location.href.indexOf('member.php') !== -1 )) {
  181. return;
  182. }
  183. // 用户名
  184. var $username = $('a.user-name');
  185.  
  186. // 显示画师id
  187. var $id = $('<span>ID: ' + pixiv.context.userId + '</span>');
  188. $id.on('click', function () {
  189. var $this = $(this);
  190. $this.text('ID已复制到剪贴板');
  191. GM_setClipboard(pixiv.context.userId);
  192. setTimeout(function () {
  193. $this.text('ID: ' + pixiv.context.userId);
  194. }, 2000);
  195. });
  196. $username.after($id);
  197.  
  198. // 显示画师背景图
  199. var url = $('body').css('background-image').replace('url(', '').replace(')', '').replace(/\"/gi, "");
  200. $username.after('<a target="_blank" href="' + url + ' ">背景图</a>');
  201. })();
  202.  
  203. // 自动加载评论
  204. (function () {
  205. if (!(location.href.indexOf('member_illust.php') !== -1)) {
  206. return;
  207. }
  208.  
  209. // 1秒加载一次评论
  210. var clickEvent = document.createEvent('MouseEvents');
  211. clickEvent.initEvent('click', true, true);
  212. setInterval(function () {
  213. var more = document.getElementsByClassName('_3aAuVt-')[0];
  214. if (!!more) {
  215. more.dispatchEvent(clickEvent);
  216. }
  217. }, 1000);
  218. })();
  219. })(jQuery);