/// <summary>
        /// もし404エラー(接続切れ)になっていたらログインを再度行う
        /// </summary>
        public void RetryLogin()
        {
            try
            {
                // エラーになっていないかどうか確認 見つかった場合は何もしない
                this.IsActivate();
                if (this.chrome.IsFindElementById("header"))
                {
                    return;
                }

                // 見つからない場合はログインしなおし TODO:デモと本番の切り替えられるようにする
                chrome.Navigate().Refresh();
                chrome.WaitCompleteDelay(1000);
                // 歓迎ボタンを押す
                IWebElement welcomeBtn = CommonDriverControl.
                                         GetSafeWebElementByXPath(this.chrome, Constants.XPATH_HL_Welcome_Button);
                welcomeBtn.Click();
                CommonControl.SleepWait(1000);

                CommonControl.DebugPrint("リフレッシュした。");
            }
            catch (Exception e)
            {
                CommonControl.DebugPrint(e, "RetryLogin");
            }
        }
Beispiel #2
0
        /// <summary>
        /// 対象のルームの新着が来るのを待つ<br></br>
        /// 新着が来たらその部屋名を取得
        /// </summary>
        /// <param name="roomName">部屋名</param>
        /// <returns></returns>
        public Boolean IsRoomsNewArrivals(string roomName)
        {
            string targetRoomXPATH = string.Format(Constants.XPATH_LINE_NewArrivals, roomName);

            CommonDriverControl.WaitElementArrivalByXPath(this.chrome, targetRoomXPATH);

            return(true);
        }
        /// <summary>
        /// ハイローからログアウトする
        /// </summary>
        /// <returns></returns>
        public void Logout()
        {
            try
            {
                IsActivate();

                IWebElement eleLogoutBtn = CommonDriverControl.GetSafeWebElementById(this.chrome, "Logout");
                eleLogoutBtn.Click();
            }
            catch (Exception)
            {
                // 投げない
                //throw;
            }
        }
Beispiel #4
0
        /// <summary>
        /// 対象のルームの新着が来るのを待つ
        /// 新着が来たらその部屋名を返す
        /// </summary>
        /// <param name="roomName">部屋名</param>
        /// <returns></returns>
        public string WaitRoomNewArrivals(string roomName)
        {
            string targetRoomXPATH = string.Format(Constants.XPATH_LINE_NewArrivals, roomName);

            Boolean ret = CommonDriverControl.WaitElementArrivalByXPath(this.chrome, targetRoomXPATH);

            if (ret)
            {
                return(roomName);
            }
            else
            {
                return(string.Empty);
            }
        }
        /// <summary>
        /// 【デモ版】ハイローにログインする
        /// </summary>
        public void demoLogin()
        {
            // デモログインボタン 見つかるまで
            IWebElement demoLoginLink = CommonDriverControl.GetSafeWebElementByXPath(
                chrome, "//*[@id='header']/div/div/div/div/div/span/span/a[1]");

            demoLoginLink.Click();
            this.chrome.WaitCompleteDelay(3000);

            // 歓迎ボタンを押す
            IWebElement welcomeBtn = CommonDriverControl.
                                     GetSafeWebElementByXPath(this.chrome, Constants.XPATH_HL_Welcome_Button);

            welcomeBtn.Click();
            CommonControl.SleepWait(500);
        }
 /// <summary>
 /// ハイロー画面を開く
 /// </summary>
 /// <param name="demoFlag">Trueデモ / False本トレ</param>
 public void Open(bool demoFlag)
 {
     if (demoFlag)
     {
         // ハイローURLを開く デモにログイン
         CHROME_HANDLE_HIGH_LOW_ME = CommonDriverControl.OpenNewWindowTab(
             this.chrome, Constants.URL_HIGH_LOW_DEMO);
         chrome.WaitCompleteDelay(2000);
     }
     else
     {
         // 本番にログイン
         CHROME_HANDLE_HIGH_LOW_ME = CommonDriverControl.OpenNewWindowTab(
             this.chrome, Constants.URL_HIGH_LOW);
         chrome.WaitComplete(1000);
     }
 }
Beispiel #7
0
        /// <summary>
        /// ラインにログインする
        /// </summary>
        public void LoginLINE(String address, String passWord)
        {
            try
            {
                this.chrome.Url = Constants.URL_LINE_Index;

                // TODO:空白ぺージを完全と誤って判断している? 読み込み待ち用
                chrome.WaitCompleteDelay(1000);

                // ラインのハンドルをキープ
                Constants.CHROME_HANDLE_LINE = chrome.CurrentWindowHandle;

                // アドレス 一回入力すれば、プロファイルから省略可
                //IWebElement eleAdrs = this.chrome.FindElementById("line_login_email");
                //eleAdrs.SendKeys(address);

                // パス
                IWebElement eleLoginPwd = CommonDriverControl.GetSafeWebElementById(this.chrome, "line_login_pwd");
                eleLoginPwd.SendKeys(passWord);

                Thread.Sleep(500);

                // ログイン
                IWebElement eleLoginBtn = CommonDriverControl.GetSafeWebElementById(this.chrome, "login_btn");
                eleLoginBtn.Click();

                // 部屋名が現れるまで待つ
                CommonControl.SleepWait(1000);
                CommonDriverControl.WaitElementArrivalById(this.chrome, Constants.HTML_ID_LINE_ChatRoomDivId);

                // TODO:LINEの読み込み処理を完全に待つ方法がわからない
                this.chrome.WaitCompleteDelay(2000);

                // 部屋リストを最後までスクロールして部屋名リストを全部読みこむ
                ChatRoomListScrollEnd();
                CommonControl.SleepWait(300);
                ChatRoomListScrollTop();

                CommonControl.SleepWait(500);
            }
            catch (Exception e)
            {
                throw e;
            }
        }
Beispiel #8
0
        /// <summary>
        /// 対象のルームをアクティブにする
        /// </summary>
        /// <param name="roomName">部屋名</param>
        public void RoomAvtive(string roomName)
        {
            try
            {
                bool successFlag = false;
                int  tryTimes    = 0;       // 試行回数

                while (successFlag == false)
                {
                    // 部屋を画面内に
                    IWebElement eleRoom = FindElementRoomTitleLiByXPath(roomName);
                    CommonDriverControl.ScrollTargetElementView(eleRoom);

                    // 部屋をクリックする
                    eleRoom.Click();
                    this.chrome.WaitCompleteDelay(500);

                    // 本当にクリック成功したか?
                    IWebElement eleRoomHeader = this.chrome.FindElementByXPath("//*[@id='_chat_header_area']/div/div[2]/h1");
                    if (eleRoomHeader.Text.Equals(roomName))
                    {
                        successFlag = true;
                    }
                    else
                    {
                        tryTimes += 1;
                    }

                    if (tryTimes >= 3)
                    {
                        throw new Exception("LINEの対象の部屋をアクティブにする既定の試行回数をこえました");
                    }
                }
            }
            catch (NoSuchElementException)
            {
                CommonControl.DebugPrint("対象の部屋をアクティブにしようとして失敗しました。 対象の部屋:" + roomName);
                throw;
            }
            catch (Exception e)
            {
                CommonControl.DebugPrint(e);
                //throw e;
            }
        }
        /// <summary>
        /// 【正規版】本番にログインを行う
        /// </summary>
        public void Login()
        {
            try
            {
                //// ログインボタンを押す
                IWebElement loginBtn = CommonDriverControl.GetSafeWebElementByXPath(
                    this.chrome, "//*[@id='header']/div/div/div/div/div/span/span/a[2]");
                loginBtn.Click();

                //  ログイン後、ロードが走る場合があるのでそれを考慮
                CommonControl.SleepWait(2000);

                // ログインID
                IWebElement eleLoginId = CommonDriverControl.
                                         GetSafeWebElementById(this.chrome, "login-username");
                eleLoginId.SendKeys(Constants.Login_HL_ID);

                CommonControl.SleepWait(500);

                // ログインパスワード
                IWebElement eleLoginPassWord = CommonDriverControl.
                                               GetSafeWebElementById(this.chrome, "login-password");
                eleLoginPassWord.SendKeys(Constants.Login_HL_PassWord);

                CommonControl.SleepWait(500);

                // なんかログインボタンがうまく取れないのでエンターで代用
                eleLoginPassWord.SendKeys("\r\n");

                //// ログインボタン 押下
                //IWebElement eleLoginTriggerBtn = CommonDriverControl.
                //                                    GetSafeWebElementByXPath(this.chrome, "//*[@id='signin - popup']/div[1]/div/div[2]/div[1]/form/div/div[6]");
                //eleLoginTriggerBtn.Click();
            }
            catch (Exception e)
            {
                // 何らかの原因でログインに失敗した
                CommonControl.DebugPrint(e, "HighLow Login");
                throw;
            }
        }
        /// <summary>
        /// ハイローにエントリーする
        /// </summary>
        /// <param name="sig">シグナル情報 コンテナ</param>
        /// <returns>True エントリー成功 / False エントリー失敗</returns>
        public Boolean EntryHighLow(ref SignalOrder sig)
        {
            try
            {
                // シグナルのステータスがエントリーのみ実行
                if (sig.mainState != SignalState.soEntry)
                {
                    return(false);
                }

                // ハイローをアクティブに
                this.IsActivate();

                // 要素が押せるようにスクロールをトップに
                chrome.ExecuteScript("document.scrollingElement.scrollTop = 140");

                // 対象の取引する銘柄へ移動
                // ===== ===== ===== ===== ===== =====
                // 銘柄リストを開く
                // ===== ===== ===== ===== ===== =====
                IWebElement BrandList = this.chrome.FindElementByXPath("//*[@id='highlow-asset-filter']");
                CommonDriverControl.ScrollTargetElementView(BrandList);
                BrandList.Click();
                CommonControl.SleepWait(500);

                // ===== ===== ===== ===== ===== =====
                // 銘柄を選ぶ
                // ===== ===== ===== ===== ===== =====
                // 検索にかける
                IWebElement eleSearchBox = this.chrome.FindElementById("searchBox");
                eleSearchBox.SendKeys(sig.tradeBrand);
                CommonControl.SleepWait(200);

                // ヒットした一番目を選択(1つしかないはず)
                IWebElement eleResultList = this.chrome.FindElementByXPath("//*[@id='assetsFilteredList']/div[1]");
                eleResultList.Click();

                // ===== ===== ===== ===== ===== =====
                // 15分固定
                // ===== ===== ===== ===== ===== =====
                IWebElement timeTab = this.chrome.FindElementByXPath(
                    "//*[@id='assetsCategoryFilterZoneRegion']/div/div[2]");
                CommonDriverControl.ScrollTargetElementView(timeTab);
                timeTab.Click();
                CommonControl.SleepWait(500);

                // ===== ===== ===== ===== ===== =====
                // エントリーする判定時刻 フレーム時間のタブを見つける
                // ===== ===== ===== ===== ===== =====
                IReadOnlyCollection <IWebElement> frameTimeDigits =
                    this.chrome.FindElementsByXPath("//*[@class='time-digits']");

                // 最大3つある フレームタイムの時間を見に行き、同じ時間を探す
                bool findFrameFlag = false;
                for (int i = 0; i < frameTimeDigits.Count(); i++)
                {
                    //シグナル時間の取得
                    string chkFrameTime = frameTimeDigits.ElementAt(i).GetAttribute("textContent");

                    // 次のシグナルの時間か?
                    if (sig.tradeTimeFrame.Equals(chkFrameTime))
                    {
                        // 表示
                        frameTimeDigits.ElementAt(i).Click();
                        findFrameFlag = true;       // 見つかった
                        break;                      // 1つしかない
                    }
                }

                // 見つからなかったとき
                if (findFrameFlag == false)
                {
                    // エントリー失敗
                    CommonControl.DebugPrint("entryHighLow", "対象のタイムフレーム時間が見つからなかった為、エントリー出来ませんでした");
                    CommonControl.DebugPrint("探そうとしたタイムフレーム" + sig.tradeTimeFrame);
                    return(false);
                }

                CommonControl.SleepWait(500);

                // ===== ===== ===== ===== ===== =====
                // エントリー金額を入力する
                // ===== ===== ===== ===== ===== =====
                // TODO:実際は総資金の10分の1入札する この仕組みは後に作る 今は単純に10分の1でエントリーする
                // 10分1が20万を超えた場合は以下のようにする
                // 例:22万円の場合、11万*2回エントリーする
                // 30万円の場合、15万円*2回エントリーする

                //  残高
                // タイムフレームを押した後、読み込み中である可能性があるので取得可能になるまで待つ(GetSafeWebElementById)
                IWebElement eleBalance = CommonDriverControl.GetSafeWebElementById(chrome, Constants.HTML_ID_HL_Balance);
                int         balance    = int.Parse(eleBalance.GetAttribute("textContent")
                                                   .Replace(@"¥", "").Replace(",", ""));

                //  入力
                IWebElement eleAmount = chrome.FindElementById(Constants.HTML_ID_HL_Amount);
                // TODO:たまに失敗してる? 要調査 念のため2回おこなう
                CommonDriverControl.ScrollTargetElementView(eleAmount);                         // 見えていないとクリアできない
                CommonDriverControl.ScrollTargetElementView(eleAmount);                         // 見えていないとクリアできない
                eleAmount.Clear();                                                              // 既存入力額をクリア
                CommonControl.SleepWait(200);

                int amount = balance / 2000;                // 資産の 20分の1で
                amount = amount * 100;                      // 100の倍数にする

                if (amount < 1000)
                {
                    amount = 1000;                      // 1000円未満になった場合は1000円
                }
                if (amount > 200000)
                {
                    amount = 200000;                     // 20万を超える場合は20万 (20万以上はエントリーできないため)
                }
                eleAmount.SendKeys(amount.ToString());

                // ===== ===== ===== ===== ===== =====
                // High Or Low 入力
                // ===== ===== ===== ===== ===== =====
                // 要素が押せるようにスクロールトップの調整
                chrome.ExecuteScript("document.scrollingElement.scrollTop = 275");
                IWebElement btn;
                switch (sig.arrow)
                {
                case arrowState.asLow:
                    btn = this.chrome.FindElementByXPath(Constants.XPATH_HL_Low_Button);
                    break;

                case arrowState.asHigh:
                    btn = this.chrome.FindElementByXPath(Constants.XPATH_HL_High_Button);
                    break;

                default:
                    CommonControl.DebugPrint("ハイ、又はローが分かりませんでした。");
                    return(false);
                }
                btn.Click();
                CommonControl.SleepWait(200);

                // ===== ===== ===== ===== ===== =====
                // エントリー時間になるまで待つ
                // ===== ===== ===== ===== ===== =====
                IWebElement rTime   = this.chrome.FindElementByXPath(Constants.XPATH_HL_Remaining_Time);
                string[]    timeTxt = rTime.GetAttribute("textContent").Split(new string[] { ":" }, StringSplitOptions.None);

                // 後どれだけ待てば良いかを求める 5分前まで
                TimeSpan tsReman = new TimeSpan(0, int.Parse(timeTxt[0]), int.Parse(timeTxt[1])) - new TimeSpan(0, 5, 0);

                while (true)
                {
                    // 残り時刻が5分切るまで待機
                    if (tsReman > new TimeSpan(0, 0, 0))
                    {
                        CommonControl.SleepWait((int)tsReman.TotalMilliseconds);
                    }
                    break;
                }

                // 成功するまで エントリーを行う
                int  tryTime   = 0;
                bool entryFlag = false;
                while (entryFlag == false)
                {
                    IWebElement entryBtn = this.chrome.FindElementById("invest_now_button");
                    entryBtn.Click();
                    CommonControl.SleepWait(1250);

                    IWebElement eleNotice = this.chrome.FindElementById(Constants.HTML_ID_HL_NoticeMsg);
                    if (eleNotice.Text.Equals("成功"))
                    {
                        //エントリーに成功した
                        entryFlag = true;
                    }
                    tryTime += 1;
                    if (tryTime > 2)
                    {
                        break;                  // 3回目失敗したら強制終了
                    }
                }
#if debug
                if (tryTime == 3)
                {
                    CommonControl.DebugPrint("3回エントリー失敗した");
                }
#endif
                //  処理自体のエントリー結果を返す
                return(entryFlag);
            }
            catch (Exception e)
            {
                // エントリーに失敗した
                CommonControl.DebugPrint(e, "EntryHighLow エントリーに失敗しました");
                //throw;// 投げない
                return(false);
            }
        }