Exemple #1
0
 public static AndroidGallery GetInstance(string actorId)
 {
     if (instance == null)
     {
         instance = new AndroidGallery(actorId);
     }
     return(instance);
 }
    /*private IEnumerator TakeScreenshotAndSave()
     * {
     *  yield return new WaitForEndOfFrame();
     *
     *  Texture2D ss = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);
     *  ss.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
     *  ss.Apply();
     *
     *  // Save the screenshot to Gallery/Photos
     *  Debug.Log("Permission result: " + NativeGallery.SaveImageToGallery(ss, "GalleryTest", "My img {0}.png"));
     *
     *  // To avoid memory leaks
     *  Destroy(ss);
     * }*/
    private void Load100Images(int maxSize)
    {
        ag = AndroidGallery.GetInstance("VRActor1");
        GameObject[] quads = GameObject.FindGameObjectsWithTag("Frame");
        Debug.Log("Load Frame Tages" + quads[0]);
        Debug.Log("Selected Quad : " + quads[0].transform.Find("Quad"));
        string[] imgs = ag.GetRecent100();
        int      i    = 0;

        foreach (GameObject q in quads)
        {
            if (imgs[i] != null)
            {
                // Create Texture from selected image
                Texture2D texture = NativeGallery.LoadImageAtPath(imgs[i], maxSize);
                if (texture == null)
                {
                    Debug.Log("Couldn't load texture from " + imgs[i]);
                    return;
                }
                GameObject quad     = q;
                Material   material = quad.transform.Find("Quad").GetComponent <Renderer>().material;
                if (!material.shader.isSupported) // happens when Standard shader is not included in the build
                {
                    material.shader = Shader.Find("Legacy Shaders/Diffuse");
                }

                material.mainTexture = texture;

                // If a procedural texture is not destroyed manually,
                // it will only be freed after a scene change
                //Destroy(texture, 5f);
                i++;
            }
        }
    }
Exemple #3
0
        static void Main(string[] args)
        {
            Logger log = LogManager.GetCurrentClassLogger();

            // загрузка настроек программы из xml-файла
            log.Info("Загрузка настроек программы из xml-файла.");
            #region **** xml settings load ****
            settings = InstaFBSettings.LoadSettingsFromXML(string.Format(@"{0}\{1}", Environment.CurrentDirectory, "instafull2.xml"));

            log.Info(string.Format("Указанный USSD-запрос: {0}.", settings.ussd));
            log.Info(string.Format("Указанный IP прокси-сервера: {0}.", settings.proxyIP));
            log.Info(string.Format("Файл с портами для ProxyDroid: {0}.", settings.pathProxyPorts));
            log.Info(string.Format("Файл с именами: {0}.", settings.pathFirstName));
            log.Info(string.Format("Файл с фамилиями: {0}.", settings.pathLastName));
            log.Info(string.Format("Указанный пол: {0}.", settings.sex));
            log.Info(string.Format("Указанная дата рождения: {0}.", settings.birthday));
            log.Info(string.Format("Папка с аватарками: {0}.", settings.pathAvatars));
            log.Info(string.Format("Файл с e-mail: {0}.", settings.pathEmails));
            log.Info(string.Format("Файл с адресами сайтов: {0}.", settings.pathWebSites));
            log.Info(string.Format("Файл с описанием для аккаунта: {0}.", settings.pathInstaInfo));
            log.Info(string.Format("Файл с именами для аккаунта: {0}.", settings.pathNames));
            log.Info(string.Format("Папка с картинками для постов: {0}.", settings.pathPictures));
            log.Info(string.Format("Файл с текстом для постов: {0}.", settings.pathPostText));
            log.Info(string.Format("Файл записи аккаунтов: {0}.", settings.pathOutputInsta));
            #endregion

            // выборка порта для прокси-сервера
            log.Info("Выбираем порт прокси из файла.");
            proxyport = getProxyPort(settings.pathProxyPorts);

            if (proxyport == "")
            {
                log.Error("Файл с портами прокси пустой.");
                return;
            }
            else
            {
                log.Info(string.Format("Выбрали порт прокси: {0}", proxyport));
                log.Info("Удаляем выбранный порт из файла.");
                removeProxyPort(settings.pathProxyPorts, proxyport);
            }

            // формируем имя и фамилию
            log.Info("Выбираем имя и фамилию.");
            Random        rnd_fn     = new Random();
            Random        rnd_ln     = new Random();
            List <string> firstnames = readWomanNames(settings.pathFirstName);
            List <string> lastnames  = readLastNames(settings.pathLastName);

            settings.FirstName = firstnames[rnd_fn.Next(0, firstnames.Count)].ToString();
            settings.LastName  = lastnames[rnd_ln.Next(0, lastnames.Count)].ToString();
            log.Info(string.Format("Выбрали имя и фамилию: {0} {1}. Пол: {2}.", settings.FirstName, settings.LastName, settings.sex));

            if (settings.FirstName == "" || settings.LastName == "")
            {
                log.Error("Имя или фамилия пустые.");
                log.Info("Возвращаем порт прокси в файл.");
                writeProxyPort(proxyport);
                return;
            }

            string machine = Environment.MachineName;
            // запуск Appium
            App.Appium app      = new App.Appium(machine, "instafull2");
            int        app_port = app.appium_port;

            if (app.device_id == -1)
            {
                log.Error("Нет свободных устройств.");
                log.Info("Возвращаем порт прокси в файл.");
                writeProxyPort(proxyport);
                log.Info("**** **** **** ****");
                System.Environment.Exit(0);
            }
            else
            {
                log.Info("**** **** **** ****");
                if (app.AppiumStart())
                {
                    NLog.Targets.FileTarget tar = (NLog.Targets.FileTarget)LogManager.Configuration.FindTargetByName("instafull2_log");
                    tar.FileName = "${basedir}/logs/instafull2_${shortdate}_" + app.device + ".log"; // создаём отдельный файл для логов
                    tar.DeleteOldFileOnStartup = false;                                              // не удалять старые логи
                    LogManager.ReconfigExistingLoggers();

                    log.Info("Создание объекта Appium");
                    log.Info("Используется устройство: {0}", app.device);

                    int pause = 30;
                    log.Info(string.Format("Пауза {0} секунд.", pause));
                    Thread.Sleep(pause * 1000);

                    DesiredCapabilities cap = new DesiredCapabilities();
                    cap.SetCapability("deviceName", "beeline");
                    cap.SetCapability("platformVersion", "4.0.3");
                    cap.SetCapability("platformName", "Android");
                    cap.SetCapability("appPackage", "ru.osg.projects.android.osgutility");
                    cap.SetCapability("appActivity", ".MainActivity");
                    cap.SetCapability("unicodeKeyboard", "true");

                    try
                    {
                        int port = app.appium_port;
                        log.Info(string.Format("Создание объекта AndroidDriver на порту {0}", port));
                        AndroidDriver <IWebElement> driver = new AndroidDriver <IWebElement>(new Uri(string.Format("http://127.0.0.1:{0}/wd/hub", port)), cap);

                        WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));  // таймаут ожидания элемента = 30 секунд

                        // **** запуск ProxyDroid **** //
                        if (proxyport != "")
                        {
                            wait.Timeout = new TimeSpan(0, 0, 10);
                            log.Info(string.Format("Запуск ProxyDroid для указания порта {0} прокси-сервера {1}.", proxyport, settings.proxyIP));
                            if (ProxyDroidStart.runProxyDroid(driver, wait, proxyport))
                            {
                                log.Info("Порт прокси указан.");
                            }
                            else
                            {
                                log.Error("Ошибка указания порта прокси.");
                                log.Info("Возвращаем порт прокси в файл.");
                                writeProxyPort(proxyport);
                                return;
                            }
                        }
                        else
                        {
                            log.Info("Пропускаем запуск ProxyDroid, так как порт прокси-сервера не задан.");
                        }

                        // **** запуск IDChanger для изменения идентификатора телефона **** //
                        log.Info(string.Format("Запуск IDChanger для изменения идентификатора телефона."));
                        android_id = DeviceIDChangerStart.runIDChanger(driver, wait);
                        log.Info(string.Format("Изменённый идентификатор телефона: {0}.", android_id));
                        settings.android_id = android_id;

                        // **** запуск получения номера телефона **** //
                        log.Info(string.Format("Запуск получения номера телефона."));
                        telephone = Telephone.getNumber(driver, wait, settings.ussd);
                        log.Info(string.Format("Номер телефона: {0}.", telephone));
                        if (telephone == "" || telephone == null)
                        {
                            status = "Ошибка получения номера телефона.";
                            log.Error(status);
                            log.Info("Возвращаем порт прокси в файл.");
                            writeProxyPort(proxyport);
                            if (app.AppiumStop(status))
                            {
                                log.Info("Работа Appium завершена.");
                            }
                            else
                            {
                                log.Error("Ошибка завершения Appium");
                            }
                            log.Info("Выполнение задачи завершено.");
                            return;
                        }
                        else
                        {
                            settings.telephone = telephone;
                        }

                        // **** запуск очистки галереи **** //
                        wait.Timeout = new TimeSpan(0, 0, 10);
                        log.Info("Запуск очистки галереи на телефоне.");
                        if (AndroidGallery.clearGallery(driver, wait))
                        {
                            log.Info("Галерея очищена.");
                        }
                        else
                        {
                            log.Error("Ошибка очистки галереи.");
                        }
                        Thread.Sleep(1000);

                        // **** запуск OSGUtility для проверки доступа в интернет **** //
                        wait.Timeout = new TimeSpan(0, 0, 30);
                        status       = InternetCheckStart.checkInternet(driver, wait);

                        if (status == InternetCheckStart.noInetConnAlert)
                        {
                            status = string.Format("На телефоне {0} нет интернета.", app.device);
                            log.Error(status);
                            log.Info("Возвращаем порт прокси в файл.");
                            writeProxyPort(proxyport);
                            if (app.AppiumStop(status))
                            {
                                log.Info("Работа Appium завершена.");
                            }
                            else
                            {
                                log.Error("Ошибка завершения Appium");
                            }
                        }
                        else
                        {
                            wait.Timeout = new TimeSpan(0, 0, 30);
                            // **** запуск Instagram для выхода из аккаунта **** //
                            #region **** instagram logout ****
                            log.Info(string.Format("Запуск Instagram для выхода из аккаунта."));
                            if (InstaLogin.LogOut(driver, wait))
                            {
                                log.Info("Успешный выход из аккаунта.");
                            }
                            else
                            {
                            }
                            #endregion

                            driver.PressKeyCode(AndroidKeyCode.Home);

                            wait.Timeout = new TimeSpan(0, 0, 30);
                            // **** запуск Instagram для регистрации нового аккаунта **** //
                            #region **** instagram reg ****
                            log.Info("Запуск Instagram для регистрации нового аккаунта.");
                            insta = InstaActions.Registration(driver, wait, settings);
                            if (insta == null)
                            {
                                status = "Ошибка регистрации.";
                                log.Error(status);
                                log.Info("Закрываем процесс Appium: {0}", app.pid);
                                if (app.AppiumStop(status))
                                {
                                    log.Info(status);
                                }
                                else
                                {
                                    log.Error("Ошибка завершения Appium");
                                }
                                return;
                            }
                            else
                            {
                                status = "Успешная регистрация нового аккаунта.";
                                log.Info(status);
                                log.Info(insta.Login);
                            }
                            #endregion

                            // **** запись аккаунта в БД **** //
                            #region **** insta db insert ****
                            if (insta != null)
                            {
                                log.Info(string.Format("Пишем в БД аккаунт Instagram: {0} {1} {2} {3}", insta.Login, insta.Password, settings.telephone, settings.android_id));
                                if (InstaAccountsBase.InstagramAdd(insta.Login,
                                                                   insta.Password,
                                                                   settings.telephone,
                                                                   settings.android_id,
                                                                   "",
                                                                   "",
                                                                   settings.proxyIP,
                                                                   int.Parse(proxyport),
                                                                   "0"))
                                {
                                    status = "Успешная запись в БД.";
                                    log.Info(status);
                                }
                                else
                                {
                                    status = "Ошибка записи в БД.";
                                    log.Error(status);
                                }
                            }

                            using (StreamWriter account_file = new StreamWriter(string.Format("accounts.txt", insta.Login), true))
                                account_file.WriteLine(insta.Login);
                            #endregion

                            wait.Timeout = new TimeSpan(0, 0, 30);
                            // **** запуск Instagram для заполнения зарегистрированного аккаунта **** //
                            #region **** instagram fill ****
                            log.Info(string.Format("Запуск Instagram для заполнения зарегистрированного аккаунта {0}.", insta.Login));
                            if (InstaActions.Fill(driver, wait, insta, settings))
                            {
                                status = "Успешное заполнение аккаунта.";
                                log.Info(status);
                            }
                            else
                            {
                                status = "Ошибка заполнения аккаунта. Смотрите логи.";
                                log.Error(status);
                            }

                            wait.Timeout = new TimeSpan(0, 0, 10);
                            // **** запуск очистки галереи **** //
                            log.Info("Запуск очистки галереи на телефоне.");
                            if (AndroidGallery.clearGallery(driver, wait))
                            {
                                log.Info("Галерея очищена.");
                            }
                            else
                            {
                                log.Error("Ошибка очистки галереи.");
                            }
                            Thread.Sleep(1000);
                            #endregion

                            wait.Timeout = new TimeSpan(0, 0, 20);
                            // **** запуск Instagram для эмуляции жизни **** //
                            log.Info(string.Format("Запуск Instagram для эмуляции жизни {0}.", insta.Login));
                            try
                            {
                                InstaActions.SearchPageView(driver, wait, 10, 500, 2000);
                                log.Info("Успешное завершение эмуляции жизни.");
                            }
                            catch
                            {
                                log.Error("Ошибка выполнения эмуляции жизни.");
                            }

                            wait.Timeout = new TimeSpan(0, 0, 30);
                            // **** запуск Instagram для размещения постов в зарегистрированном аккаунте **** //
                            #region **** instagram post ****
                            log.Info(string.Format("Запуск Instagram для размещения постов в зарегистрированном аккаунте {0}.", insta.Login));
                            if (InstaActions.Post2(driver, wait, insta, settings))
                            {
                                status = "Успешное размещение постов.";
                                log.Info(status);
                            }
                            else
                            {
                                status = "Ошибка размещения постов. Смотрите логи.";
                                log.Error(status);
                            }
                            #endregion

                            wait.Timeout = new TimeSpan(0, 0, 30);
                            // **** запуск Instagram для выхода из аккаунта **** //
                            #region **** instagram logout ****
                            // перед выходом из аккаунта включаем режим полёта
                            log.Info("Включаем режим самолёта.");
                            // открываем системное меню
                            driver.Swipe(360, 5, 330, 550, 300);
                            Thread.Sleep(1000);
                            driver.Swipe(360, 5, 330, 700, 300);
                            // включаем режим самолёта
                            try
                            {
                                wait.Until(ExpectedConditions.PresenceOfAllElementsLocatedBy(By.XPath("//android.view.View[contains(@content-desc, 'Режим полета отключен.')]")));
                                driver.FindElementByXPath("//android.view.View[contains(@content-desc, 'Режим полета отключен.')]").Click();
                                wait.Until(ExpectedConditions.PresenceOfAllElementsLocatedBy(By.XPath("//android.view.View[contains(@content-desc, 'Режим полета включен.')]")));
                            }
                            catch
                            {
                                log.Error("Ошибка при включении режима самолёта. Возможно, он уже включен.");
                            }
                            driver.PressKeyCode(AndroidKeyCode.Home);

                            log.Info(string.Format("Запуск Instagram для выхода из аккаунта."));
                            if (InstaLogin.LogOut(driver, wait))
                            {
                                log.Info("Успешный выход из аккаунта.");
                            }
                            else
                            {
                            }

                            // выключаем режим полёта
                            log.Info("Отключаем режим самолёта.");
                            // открываем системное меню
                            driver.Swipe(360, 5, 330, 550, 300);
                            Thread.Sleep(1000);
                            driver.Swipe(360, 5, 330, 700, 300);
                            // выключаем режим самолёта
                            try
                            {
                                wait.Until(ExpectedConditions.PresenceOfAllElementsLocatedBy(By.XPath("//android.view.View[contains(@content-desc, 'Режим полета включен.')]")));
                                driver.FindElementByXPath("//android.view.View[contains(@content-desc, 'Режим полета включен.')]").Click();
                                log.Info("Пауза 5 секунд.");
                                Thread.Sleep(5000);
                            }
                            catch
                            {
                                log.Error("Ошибка при выключении режима самолёта.");
                            }
                            #endregion

                            driver.PressKeyCode(AndroidKeyCode.Home);

                            // запись результата в файл зарегистрированных аккаунтов
                            #region **** output file ****
                            log.Info("Запись результата в файл зарегистрированных аккаунтов.");

                            string strOutputInsta = string.Format("{0}:{1}:{2}:{3}",
                                                                  insta.Login,
                                                                  insta.Password,
                                                                  settings.proxyIP,
                                                                  proxyport);

                            using (outputInsta = new StreamWriter(settings.pathOutputInsta, true))
                                outputInsta.WriteLine(strOutputInsta);
                            log.Info("Файл записан.");
                            #endregion

                            // завершение Appium
                            if (app.AppiumStop(status))
                            {
                                log.Info(status);
                            }
                            else
                            {
                                log.Error("Ошибка завершения Appium");
                            }
                        }
                    }
                    catch (WebDriverException e)
                    {
                        log.Error("Закончился таймаут на подключение к Appium. Подробности смотрите ниже.");
                        log.Error(e.ToString());
                        log.Info("Закрываем процесс Appium: {0}", app.pid);
                        if (app.AppiumStop(status))
                        {
                            log.Info(status);
                        }
                        else
                        {
                            log.Error("Ошибка завершения Appium");
                        }
                    }
                }
                else
                {
                    log.Error("Ошибка запуска Appium");
                }
            }

            log.Info("**** **** **** ****");
        }