执行JS(JavaScript)代码,无返回值
browser.GetBrowser().MainFrame.ExecuteJavaScriptAsync("document.getElementById('testid').click();"); browser.GetBrowser().MainFrame.ExecuteJavaScriptAsync("document.getElementById('testid2').value='123'");
在其它IFrame中执行JS(JavaScript)代码
string script = "if(document.getElementById('img_out_10000')){ document.getElementById('img_out_10000').click(); }"; var list = browser.GetBrowser().GetFrameNames(); if (list.Count > 1) { browser.GetBrowser().GetFrame(list[1]).ExecuteJavaScriptAsync(script); }
获取指定的Iframe的代码
this.browser.GetBrowser().GetFrame("tabs_portal_5_iframe").EvaluateScriptAsync("document.getElementById(\"block_3\").click()").Result;
获取包含JS方法的网页的返回值
1 Task<CefSharp.JavascriptResponse> t = mychrome.GetBrowser().MainFrame.EvaluateScriptAsync("callTest2()"); 2 // 等待js 方法执行完后,获取返回值 3 t.Wait(); 4 // t.Result 是 CefSharp.JavascriptResponse 对象 5 // t.Result.Result 是一个 object 对象,来自js的 callTest2() 方法的返回值 6 if(t.Result.Result != null) 7 { 8 MessageBox.Show(t.Result.Result.ToString()); 9 }
执行单条document语句是获取不到返回值的,像下面的代码是获取不到返回值的
1 //这样是获取不到返回值的 2 Task<CefSharp.JavascriptResponse> t = chromeBrowser.GetBrowser().MainFrame.EvaluateScriptAsync("document.getElementsByClassName('ico-goldMedal url-ctrip')[0]"); 3 t.Wait(); 4 if (t.Result.Result != null) 5 { 6 MessageBox.Show(t.Result.Result.ToString()); 7 }
正确的方法是下面这样 (将单条JS语句放到一个function 内来执行,具体原理我还没有去查相关文档,暂时这样用吧,等闲了再来好好研究一下原因)
1 object EvaluateJavaScriptResult; 2 var frame = chromeBrowser.GetMainFrame(); 3 var task = frame.EvaluateScriptAsync("(function() { return document.getElementsByClassName('class名称')[0].innerHTML; })();", null); 4 task.ContinueWith(t => 5 { 6 if (!t.IsFaulted) 7 { 8 var response = t.Result; 9 EvaluateJavaScriptResult = response.Success ? (response.Result ?? "null") : response.Message; 10 MessageBox.Show(EvaluateJavaScriptResult.ToString()); 11 } 12 });标签:知识点,browser,cef,getElementById,Result,GetBrowser,返回值,document,关于 From: https://www.cnblogs.com/boentouch/p/17024439.html