标签: cefsharp

在CefBrowser中使用JavascriptResponse获取图像(无需下载两次)

我正在尝试使用CefSharp(屏幕外)来获取网页中的图像信息。我想避免两次下载内容(我知道我可以从图像标签中提取 src 字符串,然后再次下载图像)。现在,这是我的代码:

using (var browser = new ChromiumWebBrowser("http://example.com"))
{
    //All this does is wait for the entire frame to be loaded.
    await LoadPageAsync(browser);

    var res1 = await browser.EvaluateScriptAsync("document.getElementsByTagName('img')[0].src");
    //res1.Result = the source of the image (A string)

    var res2 = await browser.EvaluateScriptAsync("document.getElementsByTagName('img')[0]");
    //This causes an APPCRASH on CefSharp.BrowserSubprocess.exe
}
Run Code Online (Sandbox Code Playgroud)

我的想法是,CefSharp已经下载这些图像来渲染网页。我想避免再次请求从客户端提取这些图像,并直接从客户端提取它们。这可能吗?该对象有哪些限制JavascriptResponse,为什么会导致出现 APPCRASH?

一些想法:我考虑过对图像进行base64编码,然后以这种方式将其拉出,但这需要我生成一个画布并每次为我想要的每个图像填充该画布,生成一个base64字符串,将其作为c#字符串,然后将其解码回图像。我不知道效率如何,但我希望有更好的解决方案。

html javascript c# image cefsharp

3
推荐指数
1
解决办法
2925
查看次数

WPF 和 CefSharp:性能低迷

我已经成功地用 c# winforms 制作了一个个人迷你浏览器应用程序。因为我想要一些更奇特的效果,所以我正在考虑制作一个 WPF 应用程序。所以我尝试了 wiki 教程并使用浏览器设置了一个简单的 WPF 表单,但注意到它的性能很慢。在非常简单的网页中选择文本时,或者只是在滚动页面时,它甚至会很明显。有什么可以做的吗?如果没有,我想那将只是 winforms,因为它的行为和性能都很好。

编辑:我的规格:http : //users.telnet.be/dropbox/specs.html

c# wpf cefsharp

3
推荐指数
1
解决办法
7247
查看次数

从 Cefsharp 浏览器获取 HTML

我在 WinForm 项目中使用 CefSharp v55.0。页面加载后,我想从中获取 HTML 代码。为此,我正在使用它:

private void WebBrowserFrameLoadEnded(object sender, FrameLoadEndEventArgs e)
{
    if (e.Frame.IsMain)
    {
        test.ViewSource();
        test.GetSourceAsync().ContinueWith(code =>
        {
            var html = code.Result;
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

对于交叉检查,我还调用了 test.ViewSource() 方法,以查看 GetSourceAsync 方法是否正在获取整个代码。

不幸的是,代码是不同的。ViewSource 正在获取整个代码,但 GetSourceAsync 没有通过页面中生成的 javascript 获取代码。

请指导我获取页面源代码的方法,例如ViewSource,或者告诉我如何捕获此ViewSource方法的临时文件。

干杯。

c# webbrowser-control chromium-embedded cefsharp

3
推荐指数
1
解决办法
7368
查看次数

CefSharp.WinForms "Dock =DockStyle.Fill" 没有效果,黑边。如何让ChromiumWebBrowser填充TBForm?

public partial class TBForm : Form
{
    private readonly ChromiumWebBrowser browser;

    public TBForm()
    {
        InitializeComponent();

        browser = new ChromiumWebBrowser("www.baidu.com")
        {
            Dock = DockStyle.Fill,
        };

        this.Controls.Add(browser);
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到这个结果

CefSharp.WinForms "Dock =DockStyle.Fill" 没有效果,黑边。

如何让ChromiumWebBrowser填写TBForm?

c# winforms cefsharp

3
推荐指数
1
解决办法
2874
查看次数

有什么方法可以在我的 c# 程序中捕获从 cefsharp 中的 javascript 抛出的错误?

举例来说,我正在使用 ExecuteJavaScriptAsync(..) 方法通过 cefSharp 运行脚本,并且在运行脚本时抛出错误,我如何检测它然后在我的 c# 程序中捕获它?

javascript c# cefsharp

3
推荐指数
1
解决办法
449
查看次数

单击 Windows 窗体中 CefSharp 浏览器中的按钮

我正在尝试单击网页 (kahoot.it) 上的一个按钮,并且我已经知道我可能需要使用 Javascript 来实现这一点,只要它与 1 行 JavaScript 保持一致,因为这很容易在WinForms。我没有太多关于按钮的信息,只有:

<button type="submit" value="Submit" class="enter-button__EnterButton-sc-1o9b9va-0 kxpxeu" data-functional-selector="join-game-pin"><span>Enter</span></button>
Run Code Online (Sandbox Code Playgroud)

你们能帮忙吗?页面上只有一个按钮,也许这会有所帮助。

html javascript c# winforms cefsharp

3
推荐指数
1
解决办法
9465
查看次数

如何将 Selenium ChromeDriver 连接到 WPF 应用程序中的嵌入式 CefSharp 浏览器?

我的 MainWindow.xaml 中有一个 ChromiumWebBrowser 控件:

<cefSharp:ChromiumWebBrowser x:Name="chromiumBrowser" Address="https://www.github.com/"/>
Run Code Online (Sandbox Code Playgroud)

我试图通过附加 Selenium ChromeDriver 来驱动它:

    ChromeOptions options = new ChromeOptions();
    options.BinaryLocation = AppDomain.CurrentDomain.FriendlyName;
    options.AddArguments("disable-extensions");
    options.AddArguments("disable-plugins");

    ChromeDriver chromeDriver = new ChromeDriver(options);
    chromeDriver.Url = "http://www.reddit.com";
Run Code Online (Sandbox Code Playgroud)

这是正确的做法吗?它似乎几乎可以工作,因为当驱动程序尝试连接嵌入式控件时,嵌入式控件会闪烁一次,但随后我从 ChromeDriver 控制台收到以下错误:

[1006/220430.356:错误:cache_util_win.cc(21)] 无法移动缓存:访问被拒绝。(0x5) [1006/220430.357:错误:cache_util.cc(139)] 无法将缓存文件夹 GPUCache 移动到 old_GPUCache_000

编辑

显然,使用 options.BinaryLocation 附加驱动程序将不幸地始终启动可执行文件的新实例。从下面的评论中,我了解到正确的方法是通过调试端口附加驱动程序。所以我通过代码创建我的浏览器控件:

CefSettings settings = new CefSettings();
settings.RemoteDebuggingPort = 9222;
settings.UserDataPath = "C:/Temp";
Cef.Initialize(settings);
browserControl = new ChromiumWebBrowser("chrome://version");
Run Code Online (Sandbox Code Playgroud)

但是当我尝试附加它时:

    ChromeOptions options = new ChromeOptions();
    options.AddArguments("--remote-debugging-port=9222");

    ChromeDriver driver = new ChromeDriver(options);
    driver.Url = "http://www.reddit.com";
Run Code Online (Sandbox Code Playgroud)

现在的错误是: System.InvalidOperationException:“会话不是从断开连接创建的:无法连接到渲染器(会话信息:chrome = 85.0.4183.121)(SessionNotCreated)”

这可能是由于 …

wpf selenium selenium-chromedriver chromium-embedded cefsharp

3
推荐指数
1
解决办法
2499
查看次数

如何在cefsharp中捕获/监听javascript函数或事件

我正在尝试将cefSharp用于WPF应用程序.我可以找到"如何从.Net调用Javascript方法.但是有没有办法可以获得.Net中Javascript函数或事件的通知?

例如,如果有一个Javascript函数(有和没有param)我可以在.Net中获取带或不带值的通知.

javascript wpf chromium-embedded cefsharp

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

ClickOnceInstall CefSharp Winforms问题

我正在尝试将我的示例Cefsharp winforms项目作为clickonceinstall应用程序运行.在创建过程中一切都很好,但是当我尝试安装程序时(程序当然正在运行而且没有问题)没有任何反应!我尝试使用许多不同的配置(发布,调试ecc)和平台(x86,x64),但始终是同一个问题.我能做什么?

无论如何我在Windows 10 64位上使用Visual Studio 15.如果您需要一些代码,请告诉我

提前致谢

c# winforms cefsharp

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

使用CefSharp v65加载本地html / css / js文件

我正在尝试在WinForms中使用CefSharp v65加载本地html / css / js文件。

我发现了与此有关的其他堆栈溢出帖子,但没有一个使用新的内置版本FolderSchemeHandlerFactory,而是实现了自己的版本。这是我在Scheme Handler上阅读的文档:https : //github.com/cefsharp/CefSharp/wiki/General-Usage在“ Scheme Handler”标题下。

资料来源:在CefSharp中使用本地构建的网页

我尝试像这样使用新功能:

    public ChromiumWebBrowser browser;

    public void InitBrowser()
    {            
        var settings = new CefSettings();
        settings.RegisterScheme(new CefCustomScheme
        {
            SchemeName = "localfolder",
            SchemeHandlerFactory = new FolderSchemeHandlerFactory(
                rootFolder: @"..\..\..\..\CEFSharpExample\webpage",
                defaultPage: "index.html" // default
            )
        });

        Cef.Initialize(settings);

        string html = File.ReadAllText(@"..\..\..\webpage\index.html");
        browser = new ChromiumWebBrowser();
        browser.LoadHtml(html);
        this.Controls.Add(browser);
        browser.Dock = DockStyle.Fill;

    }
Run Code Online (Sandbox Code Playgroud)

但是,我只是得到没有CSS的html,调试器中没有例外。有谁知道如何利用新的内置功能?

c# cefsharp

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