} // openPrivateWindow()

        public bool openYouTube(YouTubeUser user)
        {
            if (YouTube.isYouTubePage())
            { // Мы уже на странице "Ютуба"
                //@TODO проверить залогинен ли пользователь
                return(this.loginYouTube(user));
            } // if()


            /* Когда окно открывается, адрес для ввода УРЛ активно
             * Stencil emptyUrl = new Stencil("mozilla-firefox-empty-url-de.png");
             *
             * emptyUrl.isFound();
             *
             * if (!emptyUrl.mouseClick())
             * { // Адресная строка была не пустой.
             *  Stencil httpUrl = new Stencil("mozilla-firefox-url-http.png");
             *  httpUrl.setColorDelta(10);
             *  httpUrl.mouseClick();
             * }
             */

            // Печатаем адрес ютуба, а заодно на всякий случай выходим из аккаунта.
            BotClass.printString("www.youtube.com/logout" + Environment.NewLine);

            this.waitUntilPageIsLoaded();

            // Тут будет хранится результат выполнений функций
            bool result = true;

            result = result && this.loginYouTube(user);

            return(result);
        } // openYouTube()
Exemple #2
0
        } // isYouTubePage()

        /**
         * Ставит лайк у видео
         */
        public static bool makeLike()
        {
            // Иконка "нравится"
            Stencil likeIcon = new Stencil("YouTube-Like-Icon.png");

            likeIcon.setColorDelta(5);


            // Иконка "нравится"
            Stencil likedIcon = new Stencil("YouTube-Liked-Icon.png");

            likedIcon.setColorDelta(5);

            //@TODO проверить есть ли у браузера вертикальный бегунок и в зависимости от этого работать дальше.

            // Счётчик сколько раз мы "прокрутим" экран браузера вниз.
            int counter = 0;

            // Пока не увидим символ лайка, "прокручиваем" экран браузера вниз и считаем эти "прокручивания".
            while (!likeIcon.mouseClick() && !likedIcon.isFound())
            {
                counter++;
                BotClass.keyDown(Keys.PageDown);
                BotClass.keyUp(Keys.PageDown);

                // Не забываем сбросить старые результаты поиска
                likeIcon.resetRec();

                // Ждём две секунды, чтобы экран прокрутился вниз.
                System.Threading.Thread.Sleep(2000);
            } // while

            // после нажатия на "лайк", появляется меню "поделится" и активным становится строчка с УРЛ
            System.Threading.Thread.Sleep(2000);

            // Сдвигаем курсор в сторону и кликаем по пустому полю.
            Rectangle likeIconRec = likeIcon.getRec();

            likeIconRec.Offset(-50, 0);
            BotClass.moveCursor(likeIconRec);
            BotClass.mouseClick();

            // Возвращаем экран обратно (не пойму почему, но не всегда срабатывает. Перекликнуть рядом с кнопкой? Пока лишний раз наверх крутим)
            for (int i = 0; i <= counter + 1; i++)
            {
                BotClass.keyDown(Keys.PageUp);
                BotClass.keyUp(Keys.PageUp);

                // Ждём, вдруг...
                System.Threading.Thread.Sleep(500);
            } // for

            return(true);
        } // makeLike()
        } // loginYouTube()

        /**
         * Обновляет страницу браузера.
         */
        public Boolean refreshPage()
        {
            this.waitUntilPageIsLoaded();

            BotClass.keyDown(Keys.F5);
            BotClass.keyUp(Keys.F5);

            this.waitUntilPageIsLoaded();

            return(true);
        } // refreshPage()
Exemple #4
0
        } // getRec()

        /**
         * Есть ли картинка?
         */
        public Boolean isFound()
        {
            if (!this.rec.IsEmpty)
            { // Картинка уже была найдена
                return(true);
            } // if

            BotClass.create_screen_shot();

            Rectangle rec = BotClass.imageSearch(this.image, this.delta);

            return(this.rectangleToBool(rec));
        } // isFound()
        public bool closeBrowserWindow()
        {
            Stencil closeWindow = new Stencil("mozilla-firefox-closeWindow.png");

            closeWindow.setColorDelta(20);
            if (closeWindow.mouseClick())
            { // увидели значёк закрытия окна и смогли по нему кликнуть.
                //сдвинуть курсор в сторону, а то он перекрывает менюшку
                BotClass.moveCursor(new System.Drawing.Rectangle(10, 10, 50, 50));
                return(true);
            }

            return(false);
        } // closeBrowserWindow()
Exemple #6
0
        } // imageSearch()

        /**
         * Ищет маленькую картинку в большой картинке. И кликает по ней мышкой.
         * @param Bitmap smallImage - искомая картинка
         * @param int colorDelta - допустимая погрешность в цвете
         * @param Rectangle rec - прямоугольник, где искать маленькую картинку
         * @return Rectangle - координаты найденой картинки (Если картинка не найдена, то пустой прямоугольник)
         */
        public static Rectangle imageSearchAndMouseClick(Bitmap smallImage, int colorDelta = 0, Rectangle searchRec = new Rectangle())
        {
            Rectangle rec = BotClass.imageSearchAndMouseMove(smallImage, colorDelta, searchRec);

            if (!rec.IsEmpty)
            { // Картинка была найдена, курсор сдвинут
                // Ждём
                System.Threading.Thread.Sleep(2000);

                // Кликаем
                BotClass.mouseClick();
            } // if

            return(rec);
        } // imageSearchAndMouseClick()
Exemple #7
0
        } // mouseClick()

        /**
         * Ищет шаблон и двигает на него мышку.
         */
        public Boolean mouseMove()
        {
            if (!this.rec.IsEmpty)
            { // Картинка уже была найдена
                // Двигаем курсор на заранее найденый прямоугольник
                BotClass.moveCursor(this.rec);

                return(true);
            } // if

            BotClass.create_screen_shot();

            Rectangle rec = BotClass.imageSearchAndMouseMove(this.image, this.delta);

            return(this.rectangleToBool(rec));
        } // imageSearchRect()
Exemple #8
0
        } // imageSearchAndMouseClick()

        /**
         * Ищет маленькую картинку в большой картинке. И двигает на неё курсор мышки.
         * @param Bitmap smallImage - искомая картинка
         * @param int colorDelta - допустимая погрешность в цвете
         * @param Rectangle rec - прямоугольник, где искать маленькую картинку
         * @return Rectangle - координаты найденой картинки (Если картинка не найдена, то пустой прямоугольник)
         */
        public static Rectangle imageSearchAndMouseMove(Bitmap smallImage, int colorDelta = 0, Rectangle searchRec = new Rectangle())
        {
            Rectangle rec = BotClass.imageSearch(smallImage, colorDelta, searchRec);

            if (!rec.IsEmpty)
            { // Картинка была найдена
                if (!BotClass.area.IsEmpty)
                {
                    rec.Offset(BotClass.area.Location);
                }

                // Двигаем курсор мыши
                BotClass.moveCursor(rec);
            }

            return(rec);
        } // imageSearchAndMouseMove()
Exemple #9
0
        } // openNewVideo()

        /**
         * Открывает нужный Ютуб-канал
         */
        public static bool openChanel(String url)
        {
            // кликаем на адрессную строку
            Stencil httpUrl = new Stencil("mozilla-firefox-url-http.png");

            httpUrl.setColorDelta(10);
            if (httpUrl.mouseClick())
            {
                BotClass.printString(url + "/videos" + Environment.NewLine);
                System.Threading.Thread.Sleep(2000);
                return(true);
            }
            else
            {
                return(false);
            } // if
        }     // openChanel()
Exemple #10
0
        } // openVideosOfChanel()

        /**
         * По двоеточии во времени ищет непросмотренные видео.
         */
        public static Rectangle searchNewVideos()
        {
            YouTube.waitUntilPageIsLoaded();

            // Признак непросмотренного видео
            Stencil videoTimeColon = new Stencil("YouTube-Video-TimeColon.png");

            videoTimeColon.setColorDelta(37);

            // Признак конца страницы
            Stencil videoListScrolledToDown = new Stencil("YouTube-VideoList-ScrolledToDown.png");
            //videoListScrolledToDown.setColorDelta(0);

            // Кнопка показать больше видео
            Stencil videoListShowMore = new Stencil("YouTube-VideoList-ShowMore.png");

            //videoListShowMore.setColorDelta(0);

            // Ищем непросмотренное видео, пока не дойдём до конца страницы
            while (!(
                       videoTimeColon.isFound() ||
                       videoListScrolledToDown.isFound()))
            {
                BotClass.keyDown(Keys.PageDown);
                BotClass.keyUp(Keys.PageDown);

                // Не забываем сбросить старые результаты поиска
                videoTimeColon.resetRec();
                videoListScrolledToDown.resetRec();
                videoListShowMore.resetRec();

                // Ждём две секунды, чтобы экран прокрутился вниз.
                System.Threading.Thread.Sleep(2000);

                //а так же не должно быть кнопки "показать больше"
                if (videoListShowMore.mouseClick())
                {
                    // Когда нажали на кнопку "показать больше", сдвигаем курсор в сторону
                    BotClass.moveCursor(1, 1);
                    System.Threading.Thread.Sleep(500);
                }
            } // while

            return(videoTimeColon.getRec());
        } // searchNewVideos()
Exemple #11
0
        } // mouseClickOverFirefoxIcon()

        public static void switchToGermanLanguage()
        {
            Stencil deIcon = new Stencil("windows-language-icon-de.png");

            deIcon.setColorDelta(100); // 110 <= delta < 120

            bool test = deIcon.isFound();

            while (!test)
            {
                BotClass.keyDown(Keys.Alt);                // зажимаем Alt
                BotClass.keyDown(Keys.ShiftKey, Keys.Alt); // зажимаем Shift

                BotClass.keyUp(Keys.ShiftKey, Keys.Alt);   // отжимаем Shift
                BotClass.keyUp(Keys.Alt);                  // отжимаем Alt

                test = deIcon.isFound();
            } // while()
        }     // switchToGermanLanguage()
        } // historyBack()

        private bool loginYouTube(YouTubeUser user)
        {
            // Ждём
            this.waitUntilPageIsLoaded();

            // Жмём на кнопку логина
            Stencil loginButtom = new Stencil("YouTube-Login-DE-Icon.png");

            //loginButtom.setColorDelta(5);
            if (!loginButtom.mouseClick())
            { // Что-то пошло не так
                return(false);
            }

            // Ждём
            this.waitUntilPageIsLoaded();
            this.waitUntilPageIsLoaded();

            // Надпись Логин (если её нет, то не надо будет вводить имя пользователя)
            Stencil login = new Stencil("YouTube-Login-DE.png");

            if (login.isFound())
            { // Если спрашивают логин, то его печатаем
                // Печатаем логин-майл
                BotClass.printString(user.getEmail() + Environment.NewLine);

                // Ждём
                this.waitUntilPageIsLoaded();
            } // if

            //@TODO надо дождаться появления запроса пароля. Обычная функция не работает с аяксом
            System.Threading.Thread.Sleep(2000);

            // Печатаем логин-майл
            //BotClass.printString("yaq123456" + Environment.NewLine);
            BotClass.printString(user.getPassword() + Environment.NewLine);

            this.waitUntilPageIsLoaded();

            return(true);
        } // loginYouTube()
Exemple #13
0
        } // makeLike()

        /**
         * Открываем непросмотренные видео.
         */
        public static bool openNewVideo()
        {
            // Нашли двоеточие во времени у непросмотренного видео.
            Rectangle rec = YouTube.searchNewVideos();

            if (!rec.IsEmpty)
            { // Нашли ещё непросмотренное видео
                // Размер картинки видео в списке 196*110
                // Размер картинки видео над полоской времени 196*94
                // Сдвигаем найденый прямоугольник на 100 и 80 пиксель, и растягиваем прямоугольник до 75 и 70 пикселей.
                rec.Offset(-100, -80);
                rec.Size = new Size(75, 70);

                // Двигаем курсор мышки и кликаем
                BotClass.moveCursor(rec);
                BotClass.mouseClick();

                return(true);
            } // if

            return(false);
        } // openNewVideo()
        } // openYouTube()

        /**
         * Открывает предыдущую страницу.
         */
        public bool historyBack()
        {
            BotClass.keyDown(Keys.BrowserBack);
            BotClass.keyUp(Keys.BrowserBack);
            return(true);
        } // historyBack()