// ==UserScript==
// @name Drive2 Auto Subscriber
// @namespace drive2.ru
// @version 0.11
// @description подписываюсь на всех
// @author drive2 lover
// @license MIT
// @match https://www.drive2.ru/*/followers/
// @grant none
// ==/UserScript==
// находим секретный ключ для POST запросов
var FCTX = document.querySelectorAll("input")[0].value;
var pages = 1;
var ajax = {};
ajax.x = function () {
if (typeof XMLHttpRequest !== 'undefined') {
return new XMLHttpRequest();
}
var versions = [
"MSXML2.XmlHttp.6.0",
"MSXML2.XmlHttp.5.0",
"MSXML2.XmlHttp.4.0",
"MSXML2.XmlHttp.3.0",
"MSXML2.XmlHttp.2.0",
"Microsoft.XmlHttp"
];
var xhr;
for (var i = 0; i < versions.length; i++) {
try {
xhr = new ActiveXObject(versions[i]);
break;
} catch (e) {
}
}
return xhr;
};
var ajax_status = 0;
ajax.send = function (url, callback, method, data, async) {
if (async === undefined) {
async = true;
}
var x = ajax.x();
x.open(method, url, async);
x.onreadystatechange = function () {
if (x.readyState == 4) {
callback(x.responseText)
}
};
if (method == 'POST') {
x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
}
x.onload = function () {
ajax_status = x.status;
};
x.send(data)
};
ajax.get = function (url, data, callback, async) {
var query = [];
for (var key in data) {
query.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key]));
}
ajax.send(url + (query.length ? '?' + query.join('&') : ''), callback, 'GET', null, async)
};
ajax.post = function (url, data, callback, async) {
var query = [];
for (var key in data) {
query.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key]));
}
sleep(3000);
ajax.send(url, callback, 'POST', query.join('&'), async)
};
// изем кнопки "страниц" и открываем их все пока получается
function clickNext(){
sleep(3000);
var nextClicked = false;
var nextbutton = document.querySelectorAll("button.c-block__more");
if(nextbutton.length > 0){
document.querySelectorAll("button.c-block__more")[0].click();
nextClicked = true;
pages++;
console.log('found and open next page: ' + pages);
} else {
console.log('not found - next btn');
}
if (!nextClicked)
{
clearInterval(nIntervId);
//var zNode = document.createElement ('div');
//zNode.innerHTML = '<button id="myButton" type="button">Fuck IT</button>';
//zNode.setAttribute ('id', 'myContainer');
//document.body.appendChild (zNode);
//document.getElementById ("myButton").addEventListener (
// "click", ButtonClickAction, false
//);
console.log('all pages opened');
// ButtonClickAction(true);
}
ButtonClickAction();
}
function sleep(milliseconds) {
let timeStart = new Date().getTime();
while (true) {
let elapsedTime = new Date().getTime() - timeStart;
if (elapsedTime > milliseconds) {
break;
}
}
}
var cars_subscribed = 0;
var request_in_process = false;
var car_ids = [];
var found_cars_count = 0;
// собираем все машинки на которые нужно подписаться в один список
function ButtonClickAction () {
var users = document.getElementsByClassName("c-user-card__cars");
if (users.length > 0)
{
for(var u = 0; u < users.length; u++){
var cars = users[u].getElementsByClassName("c-car-title");
if (cars.length > 0)
{
// берем только по одной машине у подписчика, не нужно подписываться на весь автопарк ))
car_ids.push(cars[0].getAttribute('data-ihc-id'));
// for(var c = 0; c < cars.length; c++){
// var car_id = cars[c].getAttribute('data-ihc-id');
// if (car_id && car_id > 0)
// {
// car_ids.push(car_id);
// }
//}
// уменьшаем размер дом дерева
// users[u].remove();
cars[0].parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.remove();
}
}
var rows = document.querySelectorAll(".o-grid");
if (rows.length)
{
var with_cars;
for(var r = 0; r < rows.length; r++){
with_cars = rows[r].getElementsByClassName("c-car-title");
if (with_cars.length == 0)
{
rows[r].remove();
}
}
}
}
found_cars_count = car_ids.length;
console.log('found cars: ', found_cars_count);
if (car_ids.length > 0 && sIntervId == false)
{
sIntervId = setInterval(subs, 1000);
}
}
function subs()
{
if (request_in_process)
{
console.log('waiting ...');
return;
}
request_in_process = true;
var car_id = car_ids.pop();
if (car_id)
{
ajax.post('/ajax/subscription', {'_': "subscribe", 'type': "car", 'id': car_id, '.FCTX': FCTX}, function() {
cars_subscribed++;
console.log('cars subscribed: ' + cars_subscribed + ' / ' + found_cars_count);
request_in_process = false;
// переотправляем в очередь запрос который не прошел
if (ajax_status == 403)
{
car_ids.push(car_id);
}
});
} else {
console.log('finish!');
clearInterval(sIntervId);
}
}
console.log('next btn search start');
var nIntervId = setInterval(clickNext, 3000);
var sIntervId = false;