本文目錄一覽:
- 1、什麼是cefsharp.browsersubprocess.exe嗎
- 2、c# cefsharp能不能像webbrowser那樣獲取到元素,修改這個元素的屬性呢
- 3、C# 的cefsharp 里的ChromiumWebBrowser執行js
什麼是cefsharp.browsersubprocess.exe嗎
是cefsharp谷歌程序密令,解除方法:
CefSharp調用 js。
CefSharp.WinForms.ChromiumWebBrowser wb;
ExecuteScriptAsync 方法使用方式與 js 的 eval方法一樣,非同步執行,無返回值。
// xxx為js的方法名稱。
wb.ExecuteScriptAsync(“xxx()”);
// 為 js 的 變數jsVar賦值 ‘abc’
wb.ExecuteScriptAsync(“jsVar=’abc'”);
EvaluateScriptAsync 方法使用方式與 js 的 eval方法一樣,非同步執行,有返回值。
TaskCefSharp.JavascriptResponse t = wb.EvaluateScriptAsync(“callTest2()”);
擴展資料:
Google Chrome的特點是簡潔、快速。GoogleChrome支持多標籤瀏覽,每個標籤頁面都在獨立的「沙箱」內運行,在提高安全性的同時,一個標籤頁面的崩潰也不會導致其他標籤頁面被關閉。此外,Google Chrome基於更強大的JavaScript V8引擎,這是當前Web瀏覽器所無法實現的。
另有手機版的Chrome瀏覽器,於2012年發布了Chrome瀏覽器移動版,提供IOS系統、安卓系統以及Windows Phone系統的Chrome瀏覽器,在保持瀏覽器原有特點的情況下。
實現了多終端使用瀏覽器,具有共享收藏歷史信息等功能,是手機瀏覽器的一次巨大突破。隨著Android系統的份額不斷擴大而市場佔有率不斷飆升。
c# cefsharp能不能像webbrowser那樣獲取到元素,修改這個元素的屬性呢
cefsharp新手慎用,用的是js代碼,可以獲取元素修改元素,但是使用js。
var frame = cb.GetMainFrame();
var task = frame.EvaluateScriptAsync(“(function() { return document.getElementsByTagName(‘input’)[0].value; })();”, null);
這段代碼你要充分利用py抓取到可靠信息,知道第一個input是什麼,而且有value屬性,不然就會報錯。
frame.EvaluateScriptAsync()允許你寫入js片段。
網頁抓捕當中我覺得這個還是靠譜的,現在C#有很多,webbrowser、webkitbrowser、geckofx、webkitsharp……都是些噱頭,一般的網頁都無法搞定。
py的webdriver和android的webview同出一轍,跟webkit一樣。
但是獲取信息是不行的,比如我要抓取哪個元素值,你老老實實先把decument對象獲取到,再抓。
C# 的cefsharp 里的ChromiumWebBrowser執行js
具體調用:
IBrowser browser = this._browser.GetBrowser();
if (browser.HasDocument)
{
IFrame mainFrame = browser.MainFrame;
var js = “var f= function A(){ return $(‘img’,$(‘#”+id+”‘));}; f();”;
var task = mainFrame.EvaluateScriptAsync(js, null);// “(function() { var body = document.body, html = document.documentElement; return Math.max( body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight ); })();”, null);
//執行腳本
//browser.MainFrame.ExecuteJavaScriptAsync(“document.getElementById(‘testid’).click();”);
//browser.MainFrame.ExecuteJavaScriptAsync(“document.getElementById(‘testid2’).value=’123′”);
task.ContinueWith(t =
{
if (!t.IsFaulted)
{//返回結果
var response = t.Result;
var result = response.Success ? (response.Result ?? “null”) : response.Message;
//html = result.ToString();
}
}, TaskScheduler.FromCurrentSynchronizationContext());
}
原創文章,作者:PWKW,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/147492.html