п. 9 Проверка наличия «Загадки»
В нашем случае, я взял аккаунт (Украина) и авторизовался с русского IP адреса без проблем. Но если почистить куки и попробовать зайти в этот аккаунт через прокси любой другой страны (например, Китай), или взять аккаунт другой страны (например, Казахстан) и зайти с русского IP, то мы получим следующее (Скриншот 34)
Скриншот 34
Это небольшая защита ВК. То есть просто нужно ввести недостающие цифры, которые у нас в логине. Назовем это – «Загадка», которую необходимо разгадать.
Итак, нам нужно проверить, нужен ли ввод недостающих цифр? Как это сделать? Я уже показывал, как можно делать такие проверки двумя способами. Можно опираться на различные элементы страницы (Блок сообщения, кнопка, поле ввода, картинка и т.д.), а можно опираться на текущий URL (в п. 8 я показал на примере текущего URL, в котором содержится слово «blocked»).
На скриншоте 34 видно, что в текущем URLесть то, за что можно «зацепиться» J
Текущий URL -
http://m.vk.com/login.php?act=security_check&to=&al_page=
Давайте сделаем по аналогии с 8 пунктом, только в этом случае возьмем из URL - «security_check». Будем брать значение из адресной строки и проверять, есть ли в этой строке слово «security_check»
Если есть, то значит перед нами «Загадка», будем переходить к п. 9.1 и далее по подпунктам.
Если нет, то значит и загадки нет, а это значит переходим к п. 9.2 и далее
В PM я так же добавил 2 экшена (Скриншот 35):
- экшн «Данные» (a), в котором мы берем текущий URL (b) и парсим результат по рег. выражению «security_check» (c) в переменную TMP1 (d). Предварительно, я проверил регулярку «security_check» в конструкторе (e)
- экшн «If» (f), в котором мы сравниваем текст (значение переменной TMP1) с «пустотой» (g)
Выход по зеленой ветке (TMP1 пусто, «security_check» в URLнет, «загадки» нет), я настроил в п. 9.2 (h)
Выход по красной ветке (TMP1 НЕ пусто, «security_check» в URLЕСТЬ, «загадка» ЕСТЬ), я настроил в п. 9.1 (i)
Скриншот 35
Итак, чтобы протестировать п. 9 на практике, пробуем запустить с экшена «Оповещение» (a). Если «загадка» обнаружена, то проект должен закончить выполнение на экшене п. 9.1 (b) т.к. требуется ввод недостающих цифр (c) (Скриншот 36)
Скриншот 36
п. 9.1 Ввод требуется
п. 9.1.1 Анализ и заполнение недостающих цифр номера телефона
Давайте бегло проанализируем каких цифр не хватает. Аккаунт, который я использую 77712021747:danil1998
Номер телефона 77712021747. Невооруженным глазом видно, что не хватает цифр «7120217», а цифры которые мы должны отсечь – это «77» слева и «47» справа. Реализуем это в PM.
Понажимав в нужных местах на странице «Исследовать элемент», выяснил что нужно выдернуть и почистить данные от мусора из элемента (a) и (b). Их свойства я показал рядом, нас интересуют значения атрибута «InnerHtml» (с) у обоих элементов (можно использовать OuterHtml, но там вроде как мусора по более будет). После, нужно из номера телефона убрать такие же цифры слева и справа. Далее остаётся заполнить недостающие цифры в поле ввода (d) изменив значение его атрибута «value» (e) и нажать кнопку «Подтвердить» (f) (Скриншот 37)
Скриншот 37
Будем использовать действие «Get» для этих целей. Добавляем по очереди в конструктор действий элементы (a) и (b) (Скриншот 3
.
Далее (Скриншот 3
настраиваем конструктор (A) и (B) для обоих элементов, с разницей в номерах совпадений (C) и (D). Затем у экшенов (E) и (F), которые создал конструктор действий, меняем свойство «Положить в переменную» на TMP1 (G) и TMP2 (H) соответственно. Цифры, которые слева будут в TMP1, цифры справа в TMP2.
Скриншот 38
После выполнения этих новых экшенов, в переменных будут следующие значения (Скриншот 39)
{-Variable.TMP1-} = +380
{-Variable.TMP2-} = 88
Скриншот 39
Нужно почистить их от мусора. Сделать можно с помощью обычных текстовых замен, экшн «Обработка текста» (A). В переменной TMP1 (B) заменяем «+» (C) на пустоту, а во второй переменной TMP2 (D), заменяем « » (E) (Скриншот 40)
Скриншот 40
Примечание
Забегая вперед хочу сказать, что бывают случаи, когда помимо « », в цифрах могут быть еще пробелы, которые могут встречаться как слева, так и справа. Значит, текстовую замену « » нужно делать для обоих переменных (+1 экшн). Замену «+» делаем только для TMP1, т.к. в цифрах справа он не встречается. Уже 3 экшена, далее нужно почистить обе переменные от пробелов (+2 экшена). Итого 5 экшенов, для не сложной обработки текста. А если нужно будет очень много замен? Упростим.
В экшене «Обработка текста» существует замена по рег. выражению (A), используя которую, мы можем сократить число экшенов до двух (для левой части (B) и правой части (C))
Поэтому, я переделал замены используя рег. выражения (Скриншот 41)
Скриншот 41
После «зачистки» (Скриншот 42), в переменной TMP1 у меня стало значение – «380» (A), а в TMP2 – «88» (B). Теперь эти цифры нужно убрать из номера телефона (переменная {-Variable.login-}), чтобы получить недостающие цифры. Предварительно я копирую значение переменной {-Variable.login-} в переменную {-Variable.TMP3-} (C), и далее уже работаю с ней. Для этого использую экшн «Обработка переменных». Затем можем сделать опять же с помощью обычной текстовой замены, то есть «380» (TMP1) и «88» (TMP2) заменить на «» (пустоту). Но!
Если будет номер, например, «38038011212» или «3801238888», то тогда проект отработает не правильно, так как нам нужна замена для «380» именно в начале строки. Для цифр слева нам поможет настройка «Первое» (D), которая уберет только первое совпадение, и в случае с номером «38038011212», после обработки вернет нам «38011212». Для цифр справа, нам поможет настройка «Одно совпадение», в которой мы выберем значение «Последнее» (E). Поэтому, если попадется в виде исключения номер «3801238888», результат обработки правой части получится «38012388» - то, что нам и нужно. И то, и другое можно сделать через регулярные выражения. Я реализовал эти действия в PM без них, т.к. количество экшенов это бы не уменьшило (Скриншот 42)
Скриншот 42
После выполнения этих действий, в переменной TMP3 и есть нужная нам «разгадка» (F), остается только ввести её в поле ввода.
Поле ввода показано на Скриншоте 37 (d), чтобы его заполнить, нужно изменить значение атрибута «value» (e).
Делаем так же, при помощи действия «Set» в конструкторе действия (Скриншот 43), заполняем значение атрибута «value» значением переменной TMP3 (A), где хранятся недостающие цифры номера телефона.
Скриншот 43
Добавляем этот экшен в проект, тестируем – если заполняет цифры, то всё хорошо.
Теперь осталось кликнуть по кнопке «Подтвердить», для этого используем действие «Rise» и событие «click» (Скриншот 44)
Скриншот 44
Только перед там как нажать кнопку «Подтвердить», попробуем вручную изменить «отгадку» на неверную, чтобы еще кое-что «отловить». Итак, мы плавно перешли к следующему пункту
п. 9.1.2 Проверка корректности ввода недостающих цифр
Если мы введём недостающие цифры не верно (A), то мы увидим сообщение (B), которое мы можем взять за основу проверки.
(Скриншот 45)
Скриншот 45
Такую же проверку я подробно рассматривал в п. 6 с отлавливанием каптчи. Делается в 1 экшн. Добавляем сообщение в конструктор действий (С) и перед добавлением экшена в проект, настраиваем на взятие значения любого атрибута (D).
После добавления экшена в проект, я настроил выход по «зеленой» в п. 9.1.2.2 и затем в п. X
Выход по «красной» ветке в п. 9.1.2.1, а из него в п. 9.2 (Скриншот 46)
Скриншот 46
п. 9.1.2.1 Цифры подходят переходим к п. 9.2 - сделано
п. 9.1.2.2 Цифры НЕ подходят, переходим к п. X - сделано
п. 9.2 Цифры уже введены верно или ввод НЕ требуется, переходим к след. пункту
п. 9.2.1 Добавление в файл goodaccs.txt валидного аккаунта
Давайте теперь попробуем ввести правильные недостающие цифры, нажать кнопку «Подтвердить», а затем попробовать пройти проверку экшеном из п. 9.1.2
Если все правильно, то должно перекинуть на п. 9.1.2.1 затем 9.2
Остается только добавить экшн, который будет закидывать валидный аккаунт в файл goodaccs.txt
Сделать можно при помощи экшена «Файлы» (A), который настраивается на добавление аккаунтов, в том же формате, в котором их взяли. То есть добавляем построчно через двоеточие переменные «login» и «password» (B) (Скриншот 47)
Скриншот 47
Теперь можно считать примитивный однопоточный чекер готовым. Проверяем, тестируем, можем использовать под свои нужды