コード例 #1
0
ファイル: Form1.cs プロジェクト: ghkdwls30/Youtube
        private async Task <bool> WaitForCheckScript(string script, int delay)
        {
            int timeOutCnt = 20;

            while (true)
            {
                timeOutCnt--;
                if (timeOutCnt == 0)
                {
                    return(false);
                }

                JavascriptResponse x = await EvaluateScriptAsync(script);

                Console.WriteLine((Boolean)getResult(x));

                if ((Boolean)getResult(x))
                {
                    break;
                }
                else
                {
                    await Task.Delay(delay);
                }
            }
            return(true);
        }
コード例 #2
0
ファイル: Form1.cs プロジェクト: ghkdwls30/Youtube
        private async Task LoginYoutubeAsync(string username, string password, string mophnNo)
        {
            browser.Focus();

            await EvaluateScriptAsync("document.querySelector('#text').click()");
            await WaitForPageLoadingAsync();
            await EvaluateScriptAsync("document.querySelector('#identifierId').focus()");
            await EvaluateScriptAsync(String.Format("document.querySelector('#identifierId').value = '{0}'", username.Trim()));
            await EvaluateScriptAsync("document.querySelector('#identifierNext').click()");
            await EvaluateScriptAsync("document.querySelector('input[type=password]').focus()");
            await EvaluateScriptAsync(String.Format("document.querySelector('input[type=password]').value = '{0}'", password.Trim()));
            await EvaluateScriptAsync("document.querySelector('#passwordNext').click()");

            // 로그인 대기 시간
            await Task.Delay(3000);

            // 복구 전화번호
            JavascriptResponse x = await EvaluateScriptAsync("document.querySelector('[data-challengetype = \"13\"]') !== null");

            if ((Boolean)getResult(x))
            {
                // 복구전화 클릭
                await EvaluateScriptAsync("document.querySelector('[data-challengetype = \"13\"]').click()");

                // 전화번호 입력
                await EvaluateScriptAsync("document.querySelector('.whsOnd.zHQkBf').click()");
                await EvaluateScriptAsync(String.Format("document.querySelector('.whsOnd.zHQkBf').value = '{0}'", mophnNo));

                // 다음
                await EvaluateScriptAsync("document.querySelector('.ZFr60d.CeoRYc').click()");
            }
            ;

            await WaitForPageLoadingAsync();
        }
コード例 #3
0
ファイル: Form1.cs プロジェクト: ghkdwls30/Youtube
        private async Task addLoveAsync(string loveComment)
        {
            browser.Focus();

            // 제이쿼리 로드
            await LoadJqueryAsync();

            bool isFind = false;

            while (!isFind)
            {
                //await ScrollAtCurrentPos(600, 500);

                await LoadMoreComment(99999);

                JavascriptResponse x = await EvaluateScriptAsync(String.Format("$(\"[slot='content']:contains('{0}')\").length != 0", loveComment));

                if ((Boolean)getResult(x))
                {
                    // 엘리먼트로 이동
                    await EvaluateScriptAsync(String.Format("document.scrollingElement.scrollTop = $(\"[slot='content']:contains('{0}')\").offset().top - 450", loveComment));

                    // 클릭
                    await EvaluateScriptAsync(String.Format("$(\"[slot='content']:contains('{0}')\").closest('#main').find('#like-button').click()", loveComment));

                    isFind = true;
                }
            }
        }
コード例 #4
0
        public async void ExecuteJavascript(string script)
        {
            JavascriptResponse response = await browser.EvaluateScriptAsync(script);

            Debug.WriteLine(response.Result);
            //browser.GetMainFrame().ExecuteJavaScriptAsync(script);
        }
コード例 #5
0
        private async Task InitializeRevitBridgeIfNotPresentAsync()
        {
            JavascriptResponse revitBridgeIsPresentCheckResponse = await Browser.GetMainFrame()
                                                                   .EvaluateScriptAsync("window." + JavaScriptBridge.REVIT_BRIDGE_JAVASCRIPT_NAME);

            if (revitBridgeIsPresentCheckResponse?.Result != null)
            {
                // No need to register the bridge since it's already bound
                return;
            }

            // Register the bridge between JS and C#
            // This also registers the callback that should be bound to by OpenProject to receive messages from BCFier
            Browser.JavascriptObjectRepository.UnRegisterAll();
            Browser.GetMainFrame()
            .ExecuteJavaScriptAsync($"CefSharp.DeleteBoundObject('{JavaScriptBridge.REVIT_BRIDGE_JAVASCRIPT_NAME}');");
            Browser.JavascriptObjectRepository.Register(
                JavaScriptBridge.REVIT_BRIDGE_JAVASCRIPT_NAME, _javascriptInterop, true);

            Browser.GetMainFrame().ExecuteJavaScriptAsync(@"(async function(){
await CefSharp.BindObjectAsync(""" + JavaScriptBridge.REVIT_BRIDGE_JAVASCRIPT_NAME + @""", ""bound"");
window." + JavaScriptBridge.REVIT_BRIDGE_JAVASCRIPT_NAME +
                                                          @".sendMessageToOpenProject = (message) => {console.log(JSON.parse(message))}; // This is the callback to be used by OpenProject for receiving messages
window.dispatchEvent(new Event('" + JavaScriptBridge.REVIT_READY_EVENT_NAME + @"'));
})();");
            // Now in JS, call this: openProjectBridge.messageFromOpenProject('Message from JS');
        }
コード例 #6
0
        public static JavascriptResponse EvaluateScript(string script, TimeSpan timeout)
        {
            try
            {
                var browser = VersionBrowser.browser;
                JavascriptResponse result = new JavascriptResponse();
                var task     = browser.EvaluateScriptAsync(script, timeout);
                var complete = task.ContinueWith(t =>
                {
                    if (!t.IsFaulted)
                    {
                        try
                        {
                            JavascriptResponse response = t.Result;
                            result = response;
                        }
                        catch { }
                    }
                }, TaskScheduler.Default);
                complete.Wait();
                return(result);
            }
            catch (Exception e)
            {
            }

            return(new JavascriptResponse());
        }
コード例 #7
0
            private static Exception ParseResponseException(JavascriptResponse response)
            {
                var jsErrorJSON = response.Message;

                // try parse js exception
                jsErrorJSON = jsErrorJSON.Substring(Math.Max(0, jsErrorJSON.IndexOf("{")));
                jsErrorJSON = jsErrorJSON.Substring(0, jsErrorJSON.LastIndexOf("}") + 1);

                if (!string.IsNullOrEmpty(jsErrorJSON))
                {
                    JsError jsError = null;
                    try {
                        jsError = DeserializeJSON <JsError>(jsErrorJSON);
                    } catch {
                        // ignore will throw error at the end
                    }
                    if (jsError != null)
                    {
                        jsError.Name    = jsError.Name ?? "";
                        jsError.Message = jsError.Message ?? "";
                        jsError.Stack   = jsError.Stack ?? "";
                        var jsStack = jsError.Stack.Substring(Math.Min(jsError.Stack.Length, (jsError.Name + ": " + jsError.Message).Length)).Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);
                        jsStack = jsStack.Select(l => l.Substring(1)).ToArray(); // "    at" -> "   at"

                        return(new JavascriptException(jsError.Name, jsError.Message, jsStack));
                    }
                }

                return(new JavascriptException("Javascript Error", response.Message, new string[0]));
            }
コード例 #8
0
        async void OnLoadEnd()
        {
            //Check if the browser can execute JavaScript and the ScriptTextBox is filled
            if (chromeBrowser.CanExecuteJavascriptInMainFrame)
            {
                //Evaluate javascript and remember the evaluation result
                JavascriptResponse response = await chromeBrowser.EvaluateScriptAsync(" document.getElementById('back_ground').width; ");

                JavascriptResponse response2 = await chromeBrowser.EvaluateScriptAsync(" document.getElementById('back_ground').height; ");

                if (response.Result != null && response2.Result != null)
                {
                    width  = (int)response.Result;
                    height = (int)response2.Result;
                    this.Invoke(new MethodInvoker(delegate {
                        SetBrowserSize();
                        LauncherScript.LoadScript();
                        if (LauncherScript.mScript != "")
                        {
                            chromeBrowser.ExecuteScriptAsync(LauncherScript.mScript);
                        }
                        patcher = new PATCHER();
                        patcher.Init();
                    }));
                    //MessageBox.Show( "width:"+response.Result.ToString() + ",height:" + response2.Result.ToString(), "JavaScript Result");
                }
            }
        }
コード例 #9
0
        public async Task <bool> GetProp(string obj, string prop)
        {
            string             task = "$('" + obj + "').prop('" + prop + "')";
            JavascriptResponse res  = await _internalBrowser.EvaluateScriptAsync(task);

            return((bool)res.Result);
        }
コード例 #10
0
        private async void ReadField(object sender, RoutedEventArgs e)
        {
            try
            {
                string        script      = "document.getElementsByName('inpersonid')[0].value";
                List <string> frameidents = Browser.GetBrowser().GetFrameNames();


                foreach (var item in frameidents)
                {
                    var test2 = Browser.GetBrowser().GetFrame(item);
                    JavascriptResponse response = await test2.EvaluateScriptAsync(script);


                    if (response.Result != null)
                    {
                        string resultS = response.Result.ToString(); // whatever you need
                        _personid = resultS;
                        MessageBox.Show(resultS, $"Personid found in Frame {item}");
                    }
                    else
                    {
                        MessageBox.Show("not found", $"No PersonID Found in Frame {item}");
                    }
                }
            }
            catch (Exception Err)
            {
            }
        }
コード例 #11
0
        /// <summary>
        /// Execute a chunk of JavaScript, wait for completion & return response
        /// </summary>
        /// <param name="script"></param>

        public static JavascriptResponse ExecuteJavaScript(
            IWebBrowser browser,
            string script)
        {
            //if (DebugMx.True) return new JavascriptResponse(); // disable - debug

            Stopwatch sw = Stopwatch.StartNew();

            if (Debug)
            {
                DebugLog.Message("Script: " + script);
            }

            Task <JavascriptResponse> task = WebBrowserExtensions.EvaluateScriptAsync(browser, script);

            task.Wait();

            if (Debug)
            {
                DebugLog.StopwatchMessage("Script complete, Time: ", sw);
            }

            JavascriptResponse r = task.Result;

            return(r);
        }
コード例 #12
0
        /// <summary>
        /// 方法内部定义了死循环,用此循环来捕捉需要执行的js 代码
        /// </summary>
        private void InnerFlushScripts()
        {
            ScriptTask        scriptTask = null;
            List <ScriptTask> list       = new List <ScriptTask>();
            ScriptTask        scriptTask2;

            for (; ;)                //
            {
                scriptTask2 = this.pendingScripts.Take(this.flushTaskCancelationToken.Token);
                if (scriptTask2.WaitHandle != null)
                {
                    break;
                }
                list.Add(scriptTask2);
                if (this.pendingScripts.Count <= 0)
                {
                    goto IL_42;
                }
            }
            scriptTask = scriptTask2;
IL_42:
            if (list.Count > 0)
            {
                Task <JavascriptResponse> task = this.OwnerWebView.chromium.EvaluateScriptAsync(JavascriptExecutor.WrapScriptWithErrorHandling(string.Join(";" + Environment.NewLine, from s in list
                                                                                                                                                           select s.Script)), this.OwnerWebView.DefaultScriptsExecutionTimeout);
                task.Wait(this.flushTaskCancelationToken.Token);
                JavascriptResponse response = task.Result;
                if (!response.Success)
                {
                    this.OwnerWebView.ExecuteWithAsyncErrorHandling(delegate
                    {
                        throw JavascriptExecutor.ParseResponseException(response);
                    });
                }
            }
            if (scriptTask != null)
            {
                Task <JavascriptResponse> task2 = null;
                try
                {
                    IWebBrowser chromium = this.OwnerWebView.chromium;
                    string      script   = scriptTask.Script;
                    TimeSpan?   timeout  = scriptTask.Timeout;
                    task2 = chromium.EvaluateScriptAsync(script, (timeout != null) ? timeout : this.OwnerWebView.DefaultScriptsExecutionTimeout);
                    task2.Wait(this.flushTaskCancelationToken.Token);
                    scriptTask.Result = task2.Result;
                }
                catch (Exception exception)
                {
                    if (task2 == null || !task2.IsCanceled)
                    {
                        scriptTask.Exception = exception;
                    }
                }
                finally
                {
                    scriptTask.WaitHandle.Set();
                }
            }
        }
コード例 #13
0
        private void BackupEvents()
        {
            SaveFileDialog saveFileDialog = new SaveFileDialog();

            saveFileDialog.InitialDirectory = SYSTEM.configPath;
            saveFileDialog.Filter           = CONST.BLOCKLY.EVENT_FILE_FILTER;
            saveFileDialog.FileName         = CONST.BLOCKLY.DEFAULT_EVENT_FILE;
            if (saveFileDialog.ShowDialog() != true)
            {
                return;
            }
            string fileName = saveFileDialog.FileName.Trim();

            string xml = "";

            browser.EvaluateScriptAsync("getXml();").ContinueWith(x =>
            {
                JavascriptResponse response = x.Result;
                if (response.Success)
                {
                    xml = response.Result.ToString();
                    BackupXml(fileName, xml);
                }
                else
                {
                    MessageBox.Show("Fail getting data from Blockly");
                }
            });
        }
コード例 #14
0
        public async static Task <bool> InitMainFunctions()
        {
            string             script   = System.IO.File.ReadAllText("script.js");
            JavascriptResponse response = await MainForm.mainForm.Browsers.SeaMapBrowser.EvaluateScriptAsync(script);

            return(response.Success);
        }
コード例 #15
0
        public async Task <Tuple <JavascriptResponse, FrameLoadEndEventArgs> > EvaluatePageMoveScriptAsync(string script, TimeSpan?timeSpan = null)
        {
            await WaitRequest();

            var isNavigating = true;
            JavascriptResponse    javascriptResponse    = null;
            FrameLoadEndEventArgs frameLoadEndEventArgs = null;

            EventHandler <FrameLoadEndEventArgs> complete = (sender, e) =>
            {
                isNavigating          = false;
                frameLoadEndEventArgs = e;
            };

            WebBrowser.FrameLoadEnd += complete;

            await Task.Run(() =>
            {
                var scriptAsync = WebBrowser.EvaluateScriptAsync(script, timeSpan);
                scriptAsync.Wait();
                javascriptResponse = scriptAsync.Result;
            });

            await Task.Run(() =>
            {
                while (isNavigating)
                {
                    Thread.Yield();
                }
            });

            WebBrowser.FrameLoadEnd -= complete;

            return(new Tuple <JavascriptResponse, FrameLoadEndEventArgs>(javascriptResponse, frameLoadEndEventArgs));
        }
コード例 #16
0
        public static async Task <bool> SelectByValue(this ChromiumWebBrowser browser, string selectorClassName, string value)
        {
            JavascriptResponse result = await browser.GetMainFrame().EvaluateScriptAsync(
                "{" +
                $"let found = false;" +
                $"let views = document.getElementsByClassName('{selectorClassName}');" +
                $"if(views.length == 1)" +
                "{" +
                "for(let i = 0; i < views[0].options.length; ++i)" +
                "{" +
                $"if(views[0].options[i].text == '{value}')" +
                "{" +
                "views[0].selectedIndex = i;" +
                "let e = document.createEvent('HTMLEvents');" +
                "e.initEvent('change', true, true);" +
                "views[0].dispatchEvent(e);" +
                "found = true;" +
                "break;" +
                "}" +
                "}" +
                "}" +
                "found == true" +
                "}"
                );

            return((bool)result.Result);
        }
コード例 #17
0
 public void Clear()
 {
     html      = null;
     java      = null;
     IsLoading = null;
     lastExec  = null;
     lastEval  = null;
 }
コード例 #18
0
        public async Task <string> GetInnerHTML(string xpath)
        {
            // await GetElementByXpath(xpath);;
            //JavascriptResponse res = await browser.EvaluateScriptAsync("(function(){return window.innerHTML; })()");

            JavascriptResponse res = await Chromium.EvaluateScriptAsync("(function(){return document.evaluate('" + xpath + "', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0).innerHTML; })();");

            return((string)res.Result);
        }
コード例 #19
0
        private async void ExecuteBtn_Click(object sender, EventArgs e)
        {
            if (Monaco.CanExecuteJavascriptInMainFrame)
            {
                JavascriptResponse response = await Monaco.EvaluateScriptAsync("GetText();");

                ExecuteScript(response.Result.ToString());
            }
        }
コード例 #20
0
ファイル: Form1.cs プロジェクト: ghkdwls30/Youtube
        private async Task <JavascriptResponse> EvaluateScriptAsync(string script)
        {
            Console.WriteLine(script);
            JavascriptResponse x = await browser.EvaluateScriptAsync(script);

            await Task.Delay(Int32.Parse((String)programConfig["script-delay"]));

            return(x);
        }
コード例 #21
0
 public void Process(ISemanticProcessor proc, IMembrane membrane, JavascriptResponse resp)
 {
     byte[] utf8data = resp.Script.to_Utf8();
     resp.Context.Response.ContentType     = "text/javascript";
     resp.Context.Response.ContentEncoding = Encoding.UTF8;
     resp.Context.Response.ContentLength64 = utf8data.Length;
     resp.Context.Response.OutputStream.Write(utf8data, 0, utf8data.Length);
     resp.Context.Response.Close();
 }
コード例 #22
0
        //private void googleDriveTreeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        //{
        //    handle_googleDriveTreeView_Node_selected(e.Node, null, true);
        //}

        private static async System.Threading.Tasks.Task run_ChromiumWebBrowser_update_tree_menue_checkboxes(ChromiumWebBrowser wb, string f_name, object[] args)
        {
            JavascriptResponse res = await wb.EvaluateScriptAsync(f_name, args);

            if (!res.Success)
            {
                throw new Exception("failed to run javascript in browser.");
            }
        }
コード例 #23
0
        /// <summary>
        /// 执行js脚步,等待返回,timeout 15秒
        /// </summary>
        /// <param name="b">The b.</param>
        /// <param name="script">The script.</param>
        /// <returns>System.Object.</returns>
        static object EvaluateScript(ChromiumWebBrowser b, string script)
        {
            var task = b.EvaluateScriptAsync(script);

            task.Wait(15000);
            JavascriptResponse response = task.Result;

            return(response.Success ? (response.Result ?? "") : response.Message);
        }
コード例 #24
0
ファイル: Form1.cs プロジェクト: ghkdwls30/YoutubeLogin
        private async Task <JavascriptResponse> EvaluateScriptAsync(string script)
        {
            Console.WriteLine(script);
            JavascriptResponse x = await browser.EvaluateScriptAsync(script);

            await Task.Delay(100);

            return(x);
        }
コード例 #25
0
        // Command line execution
        private async void ExecuteJavaScriptBtn_Click(object sender, RoutedEventArgs e)
        {
            if (/*Browser.CanExecuteJavascriptInMainFrame &&*/ !string.IsNullOrWhiteSpace(ScriptTextBox.Text))
            {
                JavascriptResponse response = await Browser.EvaluateScriptAsync(ScriptTextBox.Text);
            }

            // TODO - view history and active geometry
            ScriptTextBox.Clear();
        }
コード例 #26
0
            private static Exception ParseResponseException(JavascriptResponse response, IEnumerable <string> evaluatedScriptFunctions)
            {
                var jsErrorJSON = response.Message;

                // try parse js exception
                jsErrorJSON = jsErrorJSON.Substring(Math.Max(0, jsErrorJSON.IndexOf("{")));
                jsErrorJSON = jsErrorJSON.Substring(0, jsErrorJSON.LastIndexOf("}") + 1);

                var evaluatedStackFrames = evaluatedScriptFunctions.Where(f => !string.IsNullOrEmpty(f))
                                           .Select(f => new JavascriptStackFrame()
                {
                    FunctionName = f, SourceName = "eval"
                });

                if (!string.IsNullOrEmpty(jsErrorJSON))
                {
                    JsError jsError = null;
                    try {
                        jsError = DeserializeJSON <JsError>(jsErrorJSON);
                    } catch {
                        // ignore will throw error at the end
                    }
                    if (jsError != null)
                    {
                        jsError.Name    = jsError.Name ?? "";
                        jsError.Message = jsError.Message ?? "";
                        jsError.Stack   = jsError.Stack ?? "";
                        var jsStack = jsError.Stack.Substring(Math.Min(jsError.Stack.Length, (jsError.Name + ": " + jsError.Message).Length))
                                      .Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);

                        var parsedStack = new List <JavascriptStackFrame>();

                        parsedStack.AddRange(evaluatedStackFrames);

                        foreach (var stackFrame in jsStack)
                        {
                            var frameParts = StackFrameRegex.Match(stackFrame);
                            if (frameParts.Success)
                            {
                                parsedStack.Add(new JavascriptStackFrame()
                                {
                                    FunctionName = frameParts.Groups["method"].Value,
                                    SourceName   = frameParts.Groups["location"].Value,
                                    LineNumber   = int.Parse(frameParts.Groups["line"].Value),
                                    ColumnNumber = int.Parse(frameParts.Groups["column"].Value)
                                });
                            }
                        }

                        return(new JavascriptException(jsError.Name, jsError.Message, parsedStack));
                    }
                }

                return(new JavascriptException("Javascript Error", response.Message, evaluatedStackFrames));
            }
コード例 #27
0
        public static async Task <bool> CheckItemOfClassVisible(this ChromiumWebBrowser browser, string className)
        {
            JavascriptResponse result = await browser.GetMainFrame().EvaluateScriptAsync(
                "{" +
                $"let views = document.getElementsByClassName('{className}');" +
                $"views.length == 1 && views[0].style.display != 'none'" +
                "}"
                );

            return((bool)result.Result);
        }
コード例 #28
0
        public static async Task <bool> TryFindView(this ChromiumWebBrowser browser, string className)
        {
            JavascriptResponse result = await browser.GetMainFrame().EvaluateScriptAsync(
                "{" +
                $"let views = document.getElementsByClassName('{className}');" +
                $"views.length != 0;" +
                "}"
                );

            return((bool)result.Result);
        }
コード例 #29
0
        private async Task <JavascriptResponse> EvaluateJavaScript(string script)
        {
            JavascriptResponse response = null;

            if (this.ChromiumWebBrowser.CanExecuteJavascriptInMainFrame)
            {
                response = await this.ChromiumWebBrowser.EvaluateScriptAsync(script);
            }

            return(response);
        }
コード例 #30
0
        // Enter to execute command line
        private async void textBoxKeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
            {
                if (!string.IsNullOrWhiteSpace(ScriptTextBox.Text))
                {
                    JavascriptResponse response = await Browser.EvaluateScriptAsync(ScriptTextBox.Text);
                }

                ScriptTextBox.Clear();
            }
        }
コード例 #31
0
ファイル: WebResponse.cs プロジェクト: the-wazz/clifton
 public void Process(ISemanticProcessor proc, IMembrane membrane, JavascriptResponse resp)
 {
     byte[] utf8data = resp.Script.to_Utf8();
     resp.Context.Response.ContentType = "text/javascript";
     resp.Context.Response.ContentEncoding = Encoding.UTF8;
     resp.Context.Response.ContentLength64 = utf8data.Length;
     resp.Context.Response.OutputStream.Write(utf8data, 0, utf8data.Length);
     resp.Context.Response.Close();
 }