您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Multipost для Vk
// ==UserScript== // @name Multipost VK // @namespace http://tampermonkey.net/ // @version 0.1 // @description Multipost для Vk // @author ʄɛռɨx // @match https://vk.com/(Ваша страничка) // @grant none // @license GPL // ==/UserScript== (function() { 'use strict'; let wide_column = document.querySelector('#wide_column'); let page_blocks = document.querySelectorAll('#wide_column > div'); let future_post_module = createFuturePost(); wide_column.insertBefore(future_post_module,page_blocks[1]); })(); /** * Эмуляция нажатия на элемент * @param {DOMElement} element - узел на странице * @return {boolean} - признак прохода события */ function simulateClick(element) { var event = new MouseEvent('click', { 'view': window, 'bubbles': true, 'cancelable': true }); var canceled = !element.dispatchEvent(event); return canceled; } /** * Отправка отложенного сообщения на стене ВК * @param {string} text - Текст для отправки на свою стену * @param {number} date - timestamp в миллисекундах от 1970 */ function sendPost(text = 'test post from #userscript with #tampermonkey',date = new Date(2018,10,26,10,1).getTime() ){ //let text = 'test with #tampermonkey #userscript', // date = new Date(2018,10,26,10,1).getTime()/1000; let send_post = document.querySelector('#send_post'); let post_field = document.querySelector('#post_field'); let post_action_btn_layout = document.querySelectorAll('.post_action_btn_layout')[1]; date /= 1000; post_field.focus(); post_field.innerHTML = text; simulateClick(post_action_btn_layout); let postpone_date = document.querySelector('[id^=postpone_date]'); postpone_date.value = date; send_post.click(); } /** * Создание вспомогательного блока для будущих новостей */ function createFuturePost(){ let page_block = document.createElement('div'); page_block.className = 'page_block'; page_block.innerHTML = `<div class="module clear future_post_module" id="profile_future_post_module"> <a class="header_right_link fl_r" onclick="return false">вспомогательная ссылка</a> <a href="#" onclick="return false" class="module_header"> <div class="header_top clear_fix"> <span class="header_label fl_l">Мои будущие новости</span> <span class="header_count fl_l">0</span> </div> </a> <div id="page_future_post_module" class="page_future_post_module" style="padding: 13px 20px 20px;"> <textarea id='future_post' style="width:500px;min-height:200px"></textarea> <div class="add_future_post_button_wrap" > <button class="flat_button add_future_post_button" id="send_future_post" >Разместить</button> </div> </div> </div>`; const future_post = page_block.getElementsByTagName('textarea')[0]; future_post.addEventListener('keyup', e => { let header_count = page_block.getElementsByTagName('span')[1]; let posts = e.target.value.split(/\n/gi); header_count.innerHTML = posts.length; } ); const send_future_post = page_block.getElementsByTagName('button')[0]; send_future_post.addEventListener('click', e => { const future_post = document.querySelector('#future_post'); let posts = future_post.value.split(/\n/gi); let current = new Date(); current.setHours(8); current.setMinutes(Math.round(Math.random()*30)); let k = 1000 * 3600 * 24; posts.forEach( (post, i) => { let tmp = new Date(current.getTime() + (i+1)*k); sendPost(post, tmp.getTime()); }); }); return page_block; }