fc2ブログ

CefSharp.WinForms でのクッキーマネージャ処理

CefSharp.WinForms型の変数をインスタンス化すれば、ブラウザを自分のアプリで制御できるようになるが、
クッキーを取得するには、インターフェースを通してインスタンスの中のクッキーマネージャ取得関数を呼び出す必要があります。

というわけで


private async Task xHoge()
{
var cookieManager=((CefSharp.WinForms.IWinFormsWebBrowser)browser).GetCookieManager();
var result = await cookieManager.VisitUrlCookiesAsync(textBox1.Text, true);
var cookieCount = result.Count;
foreach (var cookie in result)
{
System.Diagnostics.Debug.WriteLine("CookieName: " + cookie.Name);
}
}


private void button3_Click(object sender, EventArgs e)
{
Task ts= xHoge();
}



ボタン3をクリックするとVisualStudioのコンソールにクッキーの名前が表示されます。

ポイントは、
CefSharp.WinForms.ChromiumWebBrowser browser;
と宣言した browser変数から、GetCookieManager()を引き出すところで、
通常のインテリセンスでは出てきませんし無理やり書いてもエラーになります。
https://cefsharp.github.io/api/102.0.x/html/T_CefSharp_WinForms_IWinFormsWebBrowser.htmにあるように、
IWinFormsWebBrowserというインターフェースに GetCookieManagerメソッドがあります。
インターフェースを実装しているのは、

public class ChromiumWebBrowser : ChromiumHostControlBase,
IWebBrowser, IChromiumWebBrowserBase, IDisposable, IWinFormsWebBrowser, IWinFormsChromiumWebBrowser,
IWin32Window, IComponent, ISynchronizeInvoke

というクラス宣言を見ればわかるように、ブラウザそのものです。
https://cefsharp.github.io/api/102.0.x/html/T_CefSharp_WinForms_ChromiumWebBrowser.htm
ですので、キャストしてしまえば、インターフェースとしてインテリセンスも表示されます。
キャストがいいのかよく判りませんが(C#の作法としてどうなの?)、
これで動くようになりました、ということでメモ。
英語の記事ばっかりだし・・・。

GetCookieManagerで「ブラウザが管理しているクッキー」を扱えるようになります。

スポンサーサイト



Chromeブラウザを.Net WinFormで使用する方法

ブラウザをアプリ上に実装したいことは多々あります。
ただ、IEが使えなくなったのもあり、VisualStudioのWebBrowserコントロールでは見れないサイトが多い。
なので、EdgeとかChromeとかを使う必要があります。
Edgeは、情報がそれなりに出回っていますので、Chromeについて記載します。

1.インストール(Nuget)
Nugetパッケージマネージャコンソールで以下をたたけばOK

Install-Package CefSharp.WinForms

2.コーディング①初期化
 ブラウザ変数を宣言(クラス変数)

CefSharp.WinForms.ChromiumWebBrowser browser;

public Form1()
{
InitializeComponent();
browser = new ChromiumWebBrowser("http://www.ugtop.com/spill.shtml");
Controls.Add(browser);
browser.Dock = DockStyle.Fill;
}

  フォームの最初にコントロールがフルサイズで張り付き、非同期でURLを見に行きます。

3.コーディング②移動
   ボタンなどに実装

private void button1_Click(object sender, EventArgs e)
{
browser.LoadUrl(textBox1.Text);
     :
     以下略

    上記でTextBox1にあるURLへ移動します。

4.ソース表示
   下記のshowSourceを呼び出すと、デバッグウィンドウにソースを吐き出します。

   タスクとして呼び出し

public void showSource() // <<<<<<<<<<<<<<<<<<<<<<<<<< Call this function
{
Task ts = getSource();
}


   実装

private async Task getSource()
{
try
{
//
string source = await browser.GetBrowser().MainFrame.GetSourceAsync();
//
System.Diagnostics.Debug.WriteLine(source);
     :
     以下略

その他、クッキーなどは、CookieManagerを利用しましょう。
https://github.com/cefsharp/CefSharp/wiki/General-Usage#cookie-manager



Template Designed by DW99