开发手册 欢迎您!
软件开发者资料库

.Net(C#) CefSharp Chrome 浏览器控件后台执行Iframe中的Js代码的方法

之前一直使用Webbrower浏览器控件,但最近在开发一些东西时,想要在Iframe中执行js代码,但在WebBrowser中获取不到Iframe。找到了一些资料,发现CefSharp Chrome 浏览器控件挺好用,调用Iframe中Js代码也没有问题。本文主要分享一下用CefSharp后台执行Iframe中的Js的方法。

1、Winform项目中安装CefSharp

1)使用Nuget安装

搜索cefsharp =》找到CefSharp.WinForms =》点击安装

VS(Visual Studio)中Nuget的使用

2)手动下载编译好的文件添加引用

添加以下文件引用:
CefSharp.dll
CefSharp.Core.dll
CefSharp.WinForms.dll

3)下载源代码自己编译需要的dll

代码地址:https://github.com/cefsharp/CefSharp/releases

添加以下文件引用:
CefSharp.dll
CefSharp.Core.dll
CefSharp.WinForms.dll

注意:3种方法选一种即可。

2、获取指定的Iframe的代码

this.browser.GetBrowser().GetFrame("tabs_portal_5_iframe").EvaluateScriptAsync("document.getElementById(\"block_3\").click()").Result;

3、测试代码

using CefSharp;using CefSharp.WinForms;using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace MyBrowser{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        public delegate void Mydelegate();        public ChromiumWebBrowser browser;        public void InitBrowser()        {            Cef.Initialize(new CefSettings());            browser = new ChromiumWebBrowser("https://oa.tongda2000.com/general/index.php?isIE=0&modify_pwd=0");            this.Controls.Add(browser);            browser.Dock = DockStyle.Fill;            browser.FrameLoadEnd += new EventHandler(FrameLoadEndHandle);        }        public void FrameLoadEndHandle(object sender, FrameLoadEndEventArgs e)        {            //MessageBox.Show("count = " + e.Browser.GetFrameCount());            //MessageBox.Show("e.Url = " + e.Url);            //MessageBox.Show("e.Frame.Url = " + e.Frame.Url);            if (e.Frame.Url.IndexOf("/portal/personal/") > -1)            {                var frame = e.Frame;                Task.Factory.StartNew(() =>                {                    System.Threading.Thread.Sleep(9000);                    this.browser.Invoke(new Action(() =>                    {                        var res = this.browser.GetBrowser().GetFrame("tabs_portal_5_iframe").EvaluateScriptAsync("document.getElementById(\"block_3\").click()").Result;                    }));                });                //object o = res.Result;document.getElementById("block_3").click()                // MessageBox.Show(e.Frame.IsValid.ToString());                //MessageBox.Show(e.Frame.Browser.IsLoading.ToString());            }        }        private void Form1_FormClosed(object sender, FormClosedEventArgs e)        {            Cef.Shutdown();        }    }}