В первой части статьи задекларировали некоторые переменные, написали условие выбора в зависимости от отображаемого title «Подписчики»/«Followers» и вывели в консоль количество аккаунтов. Продолжу и завершу в этой статье дописывать код парсинга фоловеров в Instagram. Осталось написать две функции. Первая  — функция сбора. Вторая — функция скроллинга нашего модального окна в которой мы опишем условия сбора данных.

Код который был написан ранее:

var div_list = document.getElementsByClassName("isgrP");
var ul_list = document.getElementsByClassName("jSC57 _6xe7A");
var li_list = document.getElementsByClassName("wo9IH");
var account = 0; 
var h1_class = document.getElementsByClassName("m82CD")[0];
var tag_div = h1_class.getElementsByTagName("div")[0];
var title = tag_div.innerHTML;
if (title == "Подписчики" || title == "Followers") 
{ 
var total_account = document.getElementsByClassName("g47SY")[1].innerHTML;
} 
else { var total_account = document.getElementsByClassName("g47SY")[2].innerHTML;
} 
total_account = total_account.match(/[^"]+/g).join('').match(/[^\s]+/g).join('').match(/[^,]+/g).join(''); 
console.log('Аккаунтов для сбора у бедолаги: ' + total_account + ' ');

Напишем функцию парсинга (сбора):

function parsing() {
var accounts = ul_list[0].innerHTML;  

Свойство innerHTML позволяет получить HTML-содержимое элемента в виде строки.

var result = accounts.match(/title=»[^»]+»/g); 

Метод match производит поиск по заданной строке с использованием регулярного выражения. Регулярные выражения пишутся в (). Метасимвол ‘^’ соответствует только началу обрабатываемого текста (начало строки). Флаг ‘g’  возвращает массив всех совпадений, без скобочных групп и других деталей.

Про то как писать регулярные выражения можно узнать:  для самых маленьких, MDN.

result.splice(account);

метод splice позволяет изменить содержимое массива за счёт добавления новых элементов в массив. В нашем случае имён аккаунтов.

var result_count = result.length;
result = result.join(‘ ‘).match(/»[^»]+»/g).join(‘ ‘).match(/[^»]+/g).join(»).match(/[^\s]+/g).join(‘\n’);

Метод join позволяет преобразовать и объединить все элементы массива в одно строковое значение. join([разделитель]), ‘ ‘ — пробел.

Произойдёт очистка от » «, каждая запись с новой строки. В итоге получим массив в виде столбца. Который и выведем в консоль при помощи следующей команды:

console.log(result);

Осталось только написать функцию скроллинга под наши параметры.

// зададим скорость прокрутки
var speed = 200;
// зададим пустой массив куда потом при помощи push поместим количество значений записей аккаунтов (высота) помещающееся в наше модальное окно
var height = [];
function scroll()
{

//определяем высоту
var div_list_height = div_list[0].scrollHeight;


// пушим в наш пустой массив height созданный выше
height.push(div_list_height);

// в самом начале мы присваивали var  account = 0, т.е. собирались собрать все аккаунты, но если к примеру мы укажем значение отличное от нуля, к примеру 100 то нам надо написать условие чтобы скрипт не ругался за нашу жадность (реальное значение аккаунтов может быть меньше запрашиваемого к парсингу), а собрал всё прокручивая список вниз на 500 px (данное значение должно быть равно положению нижнего края модального окна).

if (account >= total_account || account == 0) {
account = total_account;
}
if ((li_list.length != total_account) && (account > li_list.length) && (height[0] != height[4])) {
div_list[0].scrollBy(0, 500);

Для определения размеров элементов вне зависимости изменения zoom можно использовать плагин Page Ruler Redux

// будем забирать по 5 значений в массив после очищая height массив до тех пор пока не соберём заданное в account значение.

if (height.length == 5)
{
height = [];
}
var time = setTimeout(‘scroll()’, speed);
}
else
{
clearTimeout(time);

parsing();
}
}
scroll();

Объединяем код написанные в первой части и написанной в этой и получаем окончательный, позволяющий через консоль разработчика получать списки followers/подписчики.

var div_list = document.getElementsByClassName("isgrP");
var ul_list = document.getElementsByClassName("jSC57 _6xe7A");
var li_list = document.getElementsByClassName("wo9IH");
var account = 0;
var h1_class = document.getElementsByClassName("m82CD")[0];
var tag_div = h1_class.getElementsByTagName("div")[0];
var title = tag_div.innerHTML;

if (title == "Подписчики" || title == "Followers") {
var total_account = document.getElementsByClassName("g47SY")[1].innerHTML;
}
else
{
var total_account = document.getElementsByClassName("g47SY")[2].innerHTML;
}
total_account = total_account.match(/[^"]+/g).join('').match(/[^\s]+/g).join('').match(/[^,]+/g).join('');
console.log('Аккаунтов для сбора у бедолаги: ' + total_account + ' ');

function parsing() {

var accounts = ul_list[0].innerHTML;
var result = accounts.match(/title="[^"]+"/g);

result.splice(account);

var result_count = result.length;

result = result.join(' ').match(/"[^"]+"/g).join(' ').match(/[^"]+/g).join('').match(/[^\s]+/g).join('\n');

console.log(result);

}

var speed = 200;
var height = [];
function scroll() {

var div_list_height = div_list[0].scrollHeight;

height.push(div_list_height);

if (account >= total_account || account == 0) {

account = total_account;

}

if ((li_list.length != total_account) && (account > li_list.length) && (height[0] != height[4])) {

div_list[0].scrollBy(0, 500);


if (height.length == 5) {

height = [];

}

var time = setTimeout('scroll()', speed);
} 
else 
{
clearTimeout(time);

parsing();
}
}
scroll();

В ходе написания данной статьи ни один followers Васи Петушка не пострадал, даже наоборот — один прибавился.