关于cef的几个知识点(遇到了再补充)

执行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             });
posted @ 2023-01-04 11:53  boenotuch  阅读(389)  评论(0)    收藏  举报