-
Notifications
You must be signed in to change notification settings - Fork 118
/
Copy pathfollowers-parser.js
132 lines (130 loc) · 9.69 KB
/
followers-parser.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
console.log('%c||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||', 'color: #13a555; font-size:16px;');
console.log('%cПАРСЕР ПОДПИСЧИКОВ И ПОДПИСОК INSTAGRAM', 'color: #1d6ba3; font-size:24px;');
console.log('%c||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||', 'color: #13a555; font-size:16px;');
console.log('%c--------------------------------------------------------------------------------------', 'color: #13a555; font-size:16px;');
console.log('%cЛеонид Залюбовский 2021 | http://www.leoneed.pro | http://Instagram.com/leoneed.pro', 'color: #1d6ba3; font-size:14px;');
console.log('%c--------------------------------------------------------------------------------------', 'color: #13a555; font-size:16px;');
// --------------------------------------------------------------------------------------
try {
// ----------------------------------------------------------------------------------
// ОБЪЯВЛЕНИЕ ПЕРЕМЕННЫХ
// ----------------------------------------------------------------------------------
var div_accounts = document.getElementsByClassName("isgrP"); // класс тега div списка аккаунтов
var ul_accounts = document.getElementsByClassName("jSC57 _6xe7A"); // класс тега ul списка аккаунтов
var li_accounts = document.getElementsByClassName("wo9IH"); // класс тега li списка тег аккаунтов
var height_scrolling = []; // массив размеров (высот) скроллинга
// ----------------------------------------------------------------------------------
// СКОРОСТЬ ПРОКРУТКИ
// Задаётся в миллисекундах
// ----------------------------------------------------------------------------------
var speed_scrolling = 1000;
// ----------------------------------------------------------------------------------
// УКАЖИТЕ ТРЕБУЕМОЕ КОЛ-ВО АККАУНТОВ ДЛЯ СБОРА
// Если указать 0 (ноль) - соберет все аккаунты, по умолчанию стоит 700, свыше возможны
// ограничения - лимиты самого Instagram (ошибка 429)
// ----------------------------------------------------------------------------------
var user_count = 700;
// ----------------------------------------------------------------------------------
// ДЛЯ СБОРА ИМЕН АККАУНТОВ УКАЖИТЕ true ВМЕСТО false
// ----------------------------------------------------------------------------------
var user_name = false; // true
// ----------------------------------------------------------------------------------
// Выборка кол-ва подписчиков и подписок по языку RU-EN
// Классы расположены на главной странице Подписчики-Подписки
// ----------------------------------------------------------------------------------
var titleH1 = document.getElementsByClassName("m82CD")[0]; // класс тега h1 заголовка окна
// var titleDIV = titleH1.getElementsByTagName("div")[0]; // тег div заголовка
var title = titleH1.innerHTML;
// ----------------------------------------------------------------------------------
// УСЛОВИЕ ВЫБОРА ПОДПИСЧИКИ ИЛИ ПОДПИСКИ
// ----------------------------------------------------------------------------------
if (title == "Подписчики" || title == "Followers") {
var total_count = document.getElementsByClassName("g47SY")[1].innerHTML;
} else {
var total_count = document.getElementsByClassName("g47SY")[2].innerHTML;
}
// ----------------------------------------------------------------------------------
// Общее кол-во аккаунтов для сбора
// ----------------------------------------------------------------------------------
total_count = total_count.match(/[^"]+/g).join('').match(/[^\s]+/g).join('').match(/[^,]+/g).join('');
// ----------------------------------------------------------------------------------
console.log('%cОбщее кол-во аккаунтов для сбора: ' + total_count + ' шт.', 'color: #13a555; font-size:16px;');
// ----------------------------------------------------------------------------------
if (user_count != 0) {
console.log('%cКол-во заданное пользователем: ' + user_count + ' шт.', 'color: #13a555; font-size:16px;');
}
// ----------------------------------------------------------------------------------
console.log('%cНачался сбор данных, дождитесь выполнения...', 'color: #13a555; font-size:16px;');
// ----------------------------------------------------------------------------------
// ФУНКЦИЯ СБОРА ДАННЫХ
// ----------------------------------------------------------------------------------
function start_parsing() {
var accounts = ul_accounts[0].innerHTML;
// ------------------------------------------------------------------------------
// Разбор ников аккаунтов
// ------------------------------------------------------------------------------
var result_nick = accounts.match(/title="[^"]+"/g);
result_nick.splice(user_count);
var result_count = result_nick.length;
result_nick = result_nick.join(' ').match(/"[^"]+"/g).join(' ').match(/[^"]+/g).join('').match(/[^\s]+/g).join('\n');
// ------------------------------------------------------------------------------
// Разбор имен аккаунтов
// ------------------------------------------------------------------------------
if (user_name == true) {
var result_name = accounts.match(/<div class="wFPL8 ">[^<]+/g)
result_name.splice(user_count);
result_nick = result_nick.match(/[^\n]+/g);
result_name = result_name.join('').match(/>[^<]+/g).join('').match(/[^>]+/g).join('\n');
result_name = result_name.match(/[^\n]+/g);
// --------------------------------------------------------------------------
// Создаем ассоциативный массив и преобразовываем в строку
// --------------------------------------------------------------------------
var result_nick_name = {};
for (var i = 0; i < result_nick.length; i++) {
result_nick_name[result_nick[i]] = result_name[i];
}
result_nick_name = JSON.stringify(result_nick_name);
result_nick_name = result_nick_name.match(/[^{}"]+/g).join('').match(/[^,]+/g).join('\n').match(/[^:]+/g).join(' : ');
}
if (user_name == true) {
console.log(result_nick_name);
} else {
console.log(result_nick);
}
console.log('%cАккаунтов собрано: ' + result_count + ' шт.', 'color: #13a555; font-size:18px;');
console.log('%cВыделите собранные имена аккаунтов выше и нажмите CTRL-C, чтобы скопировать.', 'color: #13a555; font-size:16px;');
console.log('%cЗаходите подписывайтесь, ставьте лайки! https://Instagram.com/leoneed.pro | http://www.leoneed.pro ', 'color: #1d6ba3; font-size:14px;');
}
// ----------------------------------------------------------------------------------
// ФУНКЦИЯ СКРОЛЛИНГА
// ----------------------------------------------------------------------------------
function run_scrolling() {
// Определяем размер (высоту) прокрутки div_accounts
var div_accounts_height = div_accounts[0].scrollHeight;
// Заносим размеры в массив
height_scrolling.push(div_accounts_height);
// Если пользовательское значение больше реального или установлен 0, то собрать все аккаунты
if (user_count >= total_count || user_count == 0) {
user_count = total_count;
}
if ((li_accounts.length != total_count) && (user_count > li_accounts.length) && (height_scrolling[0] != height_scrolling[4])) {
div_accounts[0].scrollBy(0, 500);
// Если в массиве размеров скроллинга более 5 элементов, обнуляем
if (height_scrolling.length == 5) {
height_scrolling = [];
}
var timeoutID = setTimeout('run_scrolling()', speed_scrolling);
} else {
clearTimeout(timeoutID);
start_parsing();
}
return false;
}
// ----------------------------------------------------------------------------------
// СТАРТ РАБОТЫ СКРОЛЛИНГА + СБОР ДАННЫХ
// ----------------------------------------------------------------------------------
run_scrolling();
// ----------------------------------------------------------------------------------
} catch (e) {
console.log('%cНажмите на странице Instagram на Подписчиков или Подписки, и запустите заново скрипт', 'color: #a22e1c; font-size:18px;');
}