标签: cefsharp

CefSharp 是多线程的吗?

我在 C# 应用程序中使用 CEFSharp,并且需要在至少 10 个 WebView 中一次加载多个 url。但是它不能作为多线程工作。有没有办法以多线程运行它,否则我必须使用特定的编译选项从源代码重建?

谢谢

c# chromium-embedded cefsharp

5
推荐指数
1
解决办法
2264
查看次数

如何在 .NET C# 中获取 CefSharp DevTools 元素选择器的输出?

我已将 CefSharp 嵌入到我的 WinForms 中。现在,我试图找到一种机制,以某种方式让用户使用开发工具的元素选择器(不显示内置开发工具窗口),并且在用户单击元素时,我想在我的 .NET 代码中获取 HTML。

我可以这样做吗?关于如何做的任何帮助?

谢谢,

c# google-chrome winforms google-chrome-devtools cefsharp

5
推荐指数
1
解决办法
6629
查看次数

CefSharp是可信的点击事件吗?

我无法让 CefSharp 浏览器调用浏览器中的可信点击。在 JS(来自 CefSharp)中按如下方式启动点击事件只是完成了一半:

var e = document.createEvent("MouseEvents");
e.initMouseEvent('click', true, true, window, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
element[0].dispatchEvent(e);
Run Code Online (Sandbox Code Playgroud)

理论上,上述方法仍然会导致 .isTrusted 事件属性失败(即使 CefSharp 使用的 Chromium 版本未实现 .isTrusted)

知道 Chromium 很快就会实现 isTrusted,我怎样才能让 CefSharp 对浏览器中的元素执行可信点击呢?

javascript events click chromium-embedded cefsharp

5
推荐指数
0
解决办法
1197
查看次数

WinForms 中的 CefSharp - ExecuteScriptAsync 或 EvaluateScriptAsync 不起作用

我在我的项目中使用 CefSharp WinForms,但我无法让它从 CefSharp 浏览器控件执行 JS 脚本(虽然我要导航到 URL - 所以大多数 CEF 功能都有效)我尝试按照以下教程进行操作:https:/ /github.com/cefsharp/CefSharp/search?utf8=%E2%9C%93&q=BoundObject

我正在使用以下命名空间:

using CefSharp.WinForms;
using CefSharp.Internals;
Run Code Online (Sandbox Code Playgroud)

并添加了对以下程序集 (x64) 的引用:

CefSharp.WinForms.dll
CefSharp.dll
CefSharp.Core.dll
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用其中一个函数时仍然出现以下错误:ExecuteScriptAsync 或 EvaluateScriptAsync

我收到以下错误:

'CefSharp.WinForms.ChromiumWebBrowser' does not contain a definition for 'EvaluateScriptAsync' and no extension method 'EvaluateScriptAsync' accepting a first argument of type 'CefSharp.WinForms.ChromiumWebBrowser' could be found (are you missing a using directive or an assembly reference?)

'CefSharp.WinForms.ChromiumWebBrowser' does not contain a definition for 'ExecuteScriptAsync' and no extension method 'ExecuteScriptAsync' accepting a first argument of …
Run Code Online (Sandbox Code Playgroud)

.net c# winforms cefsharp

5
推荐指数
1
解决办法
4147
查看次数

每个浏览器有单独的缓存?

目前,我将缓存路径设置如下:

CefSettings settings = new CefSettings();
settings.CachePath = mycachePath;

Cef.Initialize(settings);

var browser = new ChromiumWebBrowser(myUrl);
Run Code Online (Sandbox Code Playgroud)

以上作品。

但是,我需要同时使用2个不同的帐户登录一个网站,但是它使用相同的cookie容器。因此,如果我先登录一个帐户,然后再登录另一个帐户,则第一个帐户将被覆盖。

每个浏览器是否可能都有一个缓存路径?

还是有更好的方法来处理这种情况?

c# visual-studio-2012 chromium-embedded cefsharp

5
推荐指数
1
解决办法
1865
查看次数

将cefSharp客户端与Selenium Chrome Driver c#绑定

我找到了这个https://bitbucket.org/chromiumembedded/cef/wiki/UsingChromeDriver链接,其中有 cef 客户端和 Selenium 驱动程序的 java 绑定。

所以我准备了一个给我用 c# windows 应用程序使用它。我所做的是创建了一个新的 winapp 项目 x86,它只包含以下运行时没有错误或问题的代码:

using CefSharp;
using CefSharp.WinForms;
namespace ClientBrowser
{
  public partial class Form1 : Form
  {
    public Form1()
    {
        InitializeComponent();
    }

    public ChromiumWebBrowser browser;
    private void Form1_Load(object sender, EventArgs e)
    {
        var settings = new CefSettings();
        settings.CefCommandLineArgs.Add("enable-npapi", "1");
        settings.IgnoreCertificateErrors = true;
        //settings.CefCommandLineArgs.Add("enable-system-flash", "1");
        Cef.Initialize(settings);
        browser = new ChromiumWebBrowser("");
        this.Controls.Add(browser);
        browser.Dock = DockStyle.Fill;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

上面的项目是作为下面新的winapp项目x86的cef客户端:

    private void Form1_Load(object sender, EventArgs e)
    {
        try {
            var …
Run Code Online (Sandbox Code Playgroud)

c# selenium cefsharp

5
推荐指数
1
解决办法
7618
查看次数

CefSharp - 获取 AJAX 请求的结果

我对 CefSharps Chromium 浏览器非常陌生,很难弄清楚如何获取 jquery ajax 请求的结果。

我的第一次尝试是将我的 AJAX 请求传递给EvaluateScriptAsync. 事实上这个脚本是有效的。它完全符合我的要求,但我没有得到任何结果/状态代码,因为我的 Cef-Task 不会等到 AJAX 完成其工作。

这是一个示例(只是示例代码):

var tasks = pdBrowser.EvaluateScriptAsync(@"
    (function(){
        $.ajax({
            type: ""POST"",
            dataType: ""json"",
            cache: false,
            url: ""_resources/php/ajaxRequests.php"",
            async: false,
            data: {
                action: ""insertCrossPlatform"",
                type: """",
                values: JSON.stringify(""foo bar"")
            },
            success: function(response) {
                if (typeof response === 'string' && response.substring(0, 5) == ""ERROR"")
                {
                    return response;
                }
                    else
                {
                    //pageReload();
                    return ""OK"";
                }
            },
            error: function(xhr, textStatus, errorThrown) {
                return errorThrown + ""\n"" + xhr.responseText;
            }, …
Run Code Online (Sandbox Code Playgroud)

javascript c# ajax jquery cefsharp

5
推荐指数
1
解决办法
5566
查看次数

CefSharp执行javascript并获取值

我正在使用 CefSharp 和从 html 文件加载的 HTML 编辑器。我得到了 javascript 代码来获取 html 编辑器的内容:

var markupStr = $('#summernote').summernote('code');
Run Code Online (Sandbox Code Playgroud)

我需要markupStr在我的 C# 应用程序中返回。我目前拥有的:

 var script = "$('#summernote').summernote('code');";
 var result = ChromiumWebBrowser.GetMainFrame().EvaluateScriptAsync(script).Result.Message;
Run Code Online (Sandbox Code Playgroud)

我可以毫不费力地在 CefSharp 中执行 JavaScript,但是,如何检索markupStr或其设置的值$('#summernote').summernote('code');

javascript c# cefsharp

5
推荐指数
1
解决办法
2万
查看次数

CefSharp网页元素点击

我正在尝试对某些页面元素(如 btn 或链接)进行简单的点击。

我编写了 2 个通过 xpath 和 CSS 选择器单击的函数。

这两个功能在浏览器的开发者控制台中都可以完美运行,但在 CEF 中部分不起作用。

  • 代码完美地点击来自开发者控制台和 Cef 的简单链接
  • 代码完美地点击了来自开发者控制台的确切按钮,但不会从 CEF 中点击。出于某种原因,它只是忽略它......

怎么会这样?js代码完全一样!...

    public void Click(string xpath)
    {
        var js = "document.evaluate(\"" + xpath + "\", document, null, XPathResult.ANY_TYPE, null).iterateNext().click();";

        EvaluateJavascript(js);
    }

    public void ClickCss(string css)
    {
        var js = "document.querySelector('"+ css + "').click()";

        EvaluateJavascript(js);
    }


    public async Task EvaluateJavascript(string script)
    {
        JavascriptResponse javascriptResponse = await Browser.GetMainFrame().EvaluateScriptAsync(script);

        if (!javascriptResponse.Success)
        {
            throw new JavascriptException(javascriptResponse.Message);
        }
    }
Run Code Online (Sandbox Code Playgroud)

细节: 在此处输入图片说明

在此处输入图片说明

使用的点击代码:

_browser.ClickCss("#upload-container a");
Run Code Online (Sandbox Code Playgroud)

再一次:相同的 js 代码在浏览器开发控制台中完美运行,但由于某种原因在 CEF …

c# click cefsharp

5
推荐指数
2
解决办法
1万
查看次数

如何在 WPF 中使用 CEFSharp 浏览器登录 Google?

我知道这是一个非常基本的问题,但我正在使用 CEFSharp 在 wpf 中创建一个浏览器(我几乎完成了),但我在某些帐户上登录 google 时遇到了障碍。我收到“此浏览器或应用程序可能不安全”的消息。信息。现在,我研究了使用 OAuth 来获取用于访问和使用 Google 某些功能的令牌,而不仅仅是如何整体登录。我只是希望用户能够登录 Google,就像他们在 Chrome 浏览器上一样(当然没有同步选项)。

在此输入图像描述 在此输入图像描述 在此输入图像描述

我使用 Google Console 注册了我的应用程序,并收到了 ClientId 和 ClientSecret,并且创建了一个窗口,当在尝试获取令牌的 google 页面上单击登录按钮时调用,但当用户键入其 e -mail,他们收到相同的消息(见下文)。

在此输入图像描述 在此输入图像描述

我不确定是否有一个 API 可以使用,或者可以让我的用户通过我的浏览器登录 google,而不必调用 Google Chrome 浏览器本身,因为这违背了我的浏览器自给自足的目的。我已经为此绞尽脑汁好几天了。有人可以帮忙吗?

以下是我的 Google 登录窗口的 xaml:

<Window x:Class="MyProject.Windows.GoogleLoginWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:wpf="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf"
    xmlns:local="clr-namespace:NP_Browser.Windows"
    mc:Ignorable="d"
    Title="Google Login Window" Height="450" Width="800" Icon="../Images/NPBrowserLogo.ico">
<Window.Resources>
    <BooleanToVisibilityConverter x:Key="btv" />
</Window.Resources>
<Grid>
    <DockPanel Visibility="{Binding State.IsSigned, Converter={StaticResource btv}}">
        <Label Content="{Binding State.Token.Name}" />
    </DockPanel>
    <Grid Visibility="{Binding State.IsNotSigned, Converter={StaticResource btv}}">
        <wpf:ChromiumWebBrowser x:Name="Wb" FontSize="16"/>
    </Grid>
</Grid>
Run Code Online (Sandbox Code Playgroud)

以下是我的 …

oauth-2.0 cefsharp google-signin

5
推荐指数
1
解决办法
5147
查看次数