CefSharpでHTML要素の値を取得するにはどうすればよいですか?
このデフォルトのWebBrowserコントロールを使用する方法を知っています。
Dim Elem As HtmlElement = WebBrowser1.Document.GetElementByID("id")
しかし、CefSharpに似たものは見つかりませんでした。私がCefSharpを使用している主な理由は、Webサイトの一部がiframeを使用してソースを格納しており、デフォルトのWebブラウザーがそれをサポートしていないためです。また、CefSharpにはInvokeMemberまたは同様の呼び出しのオプションがありますか?
ちなみにCefSharpの最新リリースを使っています。
彼らのFAQにこれを行う方法の本当に良い例があります。
これがレイジーのコードです。かなり自明で、それは私にはうまくいきました。
string script = string.Format("document.getElementById('startMonth').value;");
browser.EvaluateScriptAsync(script).ContinueWith(x =>
{
var response = x.Result;
if (response.Success && response.Result != null)
{
var startDate = response.Result;
//startDate is the value of a HTML element.
}
});
これが私のために働いた唯一の方法、バージョン57.0.0.0です。
((CefSharp.Wpf.ChromiumWebBrowser)chromeBrowser).FrameLoadEnd += Browser_FrameLoadEnd;
....
async void Browser_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e)
{
Console.WriteLine("cef-"+e.Url);
if (e.Frame.IsMain)
{
string HTML = await e.Frame.GetSourceAsync();
Console.WriteLine(HTML);
}
}
これでうまくいきました。自分で変更できます。
private async void TEST()
{
string script = "document.getElementsByClassName('glass')[0]['firstElementChild']['firstChild']['wholeText']";
JavascriptResponse response = await browser.EvaluateScriptAsync(script);
label1.Text = response.Result.ToString();
}
多分これはあなたの仕事をすることができます。
private async void TEST()
{
string script = "Document.GetElementByID('id').value";
JavascriptResponse response = await browser.EvaluateScriptAsync(script);
string resultS = response.Result.ToString(); // whatever you need
}
string script = @"document.getElementById('id_element').style;";
browser.EvaluateScriptAsync(script).ContinueWith(x=> {
var response = x.Result;
if (response.Success && response.Result != null)
{
System.Dynamic.ExpandoObject abc = (System.Dynamic.ExpandoObject)response.Result;
foreach (KeyValuePair<string,object> item in abc)
{
string key = item.Key.ToString();
string value = item.Value.ToString();
}
}
});
それは私のために働いています。