Неочевидные пути. Регистратор FB Lite на базе ZennoDroid Pro

Sherminator

Client
Регистрация
10.09.2021
Сообщения
998
Благодарностей
537
Баллы
93
118576


Введение

Приветствую всех на 12-ом конкурсе шаблонов форума ZennoLab!
В данном шаблоне в первую очередь я хотел бы продемонстрировать каким образом можно находить пути xPath к элементам которые крайне не уникальны. Постараюсь вкратце донести логику которой я руководствуюсь при построении путей. Сам шаблон реализует только регистрацию, заполнения профиля нету, мне он видится больше как учебный материал а не готовый инструмент для регистрации аккаунтов.


Входные настройки

118582


В входных настройках указывается прокся, если она мобильная то указывается и ссылка, для смены ip.

Сервис по приему смс выбирается и настраивается в сниппете, по умолчанию выбран smsHub(smsActivate) и страна usa, не виртуальные номера.



118583



Логика работы шаблона
По логике всё просто, создаем, настраиваем устройство, инсталим fb lite, если открывается старая версия (она нам и нужна для демонстрации) то начинаем регистрацию, если новая, выходим по красной.

Построение путей
Основная проблема заключается в том, что у элементов нету никаких уникальных данных в дереве по которым их можно было бы легко идентифицировать.

118585

Первое что приходит на ум это определить элемент по нескольким его атрибутам, на пример кнопку Next можно без проблем найти таким образом.

//*[@index='0' and @clickable='true']

Элементов с атрибутом index который равен 0 на странице несколько, а вот тех у кого Index = 0 и при этом атрибут clickable = true только один, это самый простой способов найти кнопку, хотя бывают и элементы которые не кнопки и у них атрибут clickable = true.
Цепочку в таком xPath можно выстраивать и длиннее, на пример:

//*[@index='0' and @clickable='true' and @focusable='true' and @displayed='true']

В целом по такому принципу проходила большая часть регистрации, в некоторых местах я ещё подключал имя класса, на пример в указании даты рождения.

//*[@class='android.view.View' and @index='0' and @clickable='true' and @focusable='true']

Самый на мой взгляд интересный момент был как раз в указании даты рождения, там нельзя было ввести её используя эмуляцию клавиатуры, надо было кликать по клавиатуре которую предоставлял FB. По прошлому способу найти кнопки не представлялось возможным, слишком много совпадений.


118587

Тут как раз можно использовать другой способ подбора xPath, если внимательно изучить дерево то становится заметно что страница состоит из групп элементов "ViewGroup" и только в одном из них есть ещё 12 элементов "ViewGroup", эти 12 элементов как раз и есть наши кнопки, осталось только получить эту коллекцию элементов с помощью вот такого xPath

//android.view.ViewGroup[@class='android.view.ViewGroup' and count(android.view.ViewGroup[@class='android.view.ViewGroup']) = 12]//android.view.ViewGroup

Тут мы грубо говоря ищем элемент android.view.ViewGroup у которого внутри есть элементы android.view.ViewGroup и их количество = 12
Не знаю как работать с коллекцией элементов на кубиках, поэтому использовал c#


C#:
 // Получаем нашу клавиатуру
var hec = instance.DroidInstance.AppiumDriver.FindElementsByXPath
                ("//android.view.ViewGroup[@class='android.view.ViewGroup' and count(android.view.ViewGroup[@class='android.view.ViewGroup']) = 12]//android.view.ViewGroup");
hec.ElementAt(0).Click(); //Делаем клик по нулевому элементу (это единица)
hec.ElementAt(1).Click(); //Делаем клик по первому элементу (это двойка)
//и тд.
В итоге, с помощью этих 2х способов построения xPath был сооружен весь шаблон.


Заключение

Данные способы сложно назвать панацеей, но лично в моих проектах они показали себя более стабильными чем на пример поиск по картинке, да, в подобных приложениях не получится сделать проверку наличия текста на странице и по большому счету шаблон выполняется в слепую.
хотя теоретически можно сделать скрин экрана, отправить его в сервис и узнать что на нем написано, и проверить, нужная ли это нам страница
Но как известно, на безрыбье и рак рыба, думаю в будущем появятся более надежные способы для определения нужных элементов.
Спасибо за внимание)


РАБОТА ШАБЛОНА


p.s

Архив с шаблоном залил на облако
 

Для запуска проектов требуется программа ZennoPoster.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...

Для того чтобы запустить шаблон, откройте программу ZennoPoster. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.

Последнее редактирование модератором:

orka13

Client
Регистрация
07.05.2015
Сообщения
2 165
Благодарностей
2 167
Баллы
113
Все верно. С FB Lite сложно по Xpath. Полноценное приложение от FB больше текстовых описаний полей имеет, я в нем регаю. Но многие отдают предпочтение лайту, так как он быстрее прогружается и меньше параметров системы собирает.
 
  • Спасибо
Реакции: Sherminator

radv

Client
Регистрация
11.05.2015
Сообщения
3 678
Благодарностей
1 862
Баллы
113
Еще замечал, что иногда дерево элементов меняется, и визуально картинка одинаковая, а дерево отличается. Поэтому делал такой регер через поиск по картинкам.
 
  • Спасибо
Реакции: Jab1Bot

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)