private static async void Screenshot(string filename) { // Create the offscreen Chromium browser. using (var browser = new CefSharp.OffScreen.ChromiumWebBrowser()) { browser.LoadHtml("<html><head></head><body></body></html>", "http://rendering/"); browser.LoadHtml(Monster.ValloricStatBlock(), "http://rendering/"); saveFilename = filename; await Task.Delay(500); int width = 0; int height = 0; while (width == 0) { width = BrowserInfo.BrowserWidth(browser); System.Threading.Thread.Sleep(100); } while (height == 0) { height = BrowserInfo.BrowserHeight(browser); System.Threading.Thread.Sleep(100); } browser.Size = new Size(width, height); await Task.Delay(500); await browser.ScreenshotAsync().ContinueWith(DisplayBitmap); } }
public UserControlWebPage() { InitializeComponent(); var assembly = Assembly.GetExecutingAssembly(); var resourceName = "WebPaparazzi.resize_image.js"; using (Stream stream = assembly.GetManifestResourceStream(resourceName)) using (StreamReader reader = new StreamReader(stream)) { _resize_script = reader.ReadToEnd(); } _browser = new ChromiumWebBrowser("") { Dock = DockStyle.Fill }; _offScreenBrowser = new CefSharp.OffScreen.ChromiumWebBrowser(""); _offScreenBrowser.Size = PaparazziResolutionConverter.DefaultSize; _offScreenBrowser.FrameLoadEnd += offScreenBrowser_FrameLoadEnd; this.panelBrowser.Controls.Add(_browser); _browser.AddressChanged += OnBrowserAddressChanged; _browser.FrameLoadEnd += browser_FrameLoadEnd; _browser.IsBrowserInitializedChanged += browser_IsBrowserInitializedChanged; }
public OffscreenWebView() { browser = new CefSharp.OffScreen.ChromiumWebBrowser(automaticallyCreateBrowser: false); browser.LoadingStateChanged += Browser_LoadingStateChanged; browser.BrowserInitialized += Browser_BrowserInitialized; browser.CreateBrowser(); browserInitializedEvent.WaitOne(5000); }
public ChromiumBrowser() { browser = new CefSharp.OffScreen.ChromiumWebBrowser(); initializeEvent = new ManualResetEventSlim(false); browser.BrowserInitialized += Browser_BrowserInitialized; initializeEvent.Wait(); }
public OffscreenWebView(WebViewSettings settings) { browser = new CefSharp.OffScreen.ChromiumWebBrowser(automaticallyCreateBrowser: false); browser.LoadingStateChanged += Browser_LoadingStateChanged; browser.BrowserInitialized += Browser_BrowserInitialized; var brwSet = new BrowserSettings { Javascript = settings.JavaScriptEnabled ? CefState.Enabled : CefState.Disabled, ApplicationCache = settings.CacheEnabled ? CefState.Enabled : CefState.Disabled }; browser.CreateBrowser(null, brwSet); browserInitializedEvent.WaitOne(5000); }
public static void ActionAt(string urlz, string js) { using (BrowserSettings offscreen_setting = new BrowserSettings()) { offscreen_setting.DefaultEncoding = "UTF-8"; offscreen_setting.WindowlessFrameRate = 5; using (CefSharp.OffScreen.ChromiumWebBrowser tempBrowser = new CefSharp.OffScreen.ChromiumWebBrowser(urlz, offscreen_setting)) { tempBrowser.RequestHandler = new UA_RequestHandler(); tempBrowser.LifeSpanHandler = new CustomLifeSpanHandler(); tempBrowser.Size = new Size(10, 10); tempBrowser.FrameLoadEnd += new EventHandler <FrameLoadEndEventArgs>((Object sender, FrameLoadEndEventArgs e) => { if (!e.Frame.IsValid) { return; } if (e.Url == Urls.olympicangel["event_end"]) { Safe.Invoke(() => { tempBrowser.Dispose(); }); GC.Collect(); return; } if (e.Frame.IsMain) { if (!js.Contains(" ") && css_js.js.ContainsKey(js)) { js = css_js.js[js]; } if (tempBrowser.CanExecuteJavascriptInMainFrame) { tempBrowser.ExecuteScriptAsyncWhenPageLoaded(js); } } }); } } }
private void Initialize(BrowserSettings settings = null) { browser = new CefSharp.OffScreen.ChromiumWebBrowser(automaticallyCreateBrowser: false); browser.LoadingStateChanged += Browser_LoadingStateChanged; browser.BrowserInitialized += Browser_BrowserInitialized; if (settings != null) { browser.CreateBrowser(null, settings); } else { browser.CreateBrowser(); } if (!browserInitializedEvent.WaitOne(30000)) { logger.Error("Failed to initialize OffscreenWebView in timely manner."); } }
public WebApiClient() { browser = new CefSharp.OffScreen.ChromiumWebBrowser(automaticallyCreateBrowser: false); browser.BrowserInitialized += Browser_BrowserInitialized; browser.CreateBrowser(IntPtr.Zero); }
/// <summary> /// 控制台模式程序入口。 /// </summary> private void ConsoleMain(string[] args) { string outputMatchCollectionPath = null, outputLogPath = null, lastOption = ""; Action <string> next = null; List <string> requiredArguments = new List <string>(); MatchConfiguration conf; Match[] matches = null; Logger = new ConsoleLogger(); try { // 解析参数 foreach (var arg in args.Skip(1)) { switch (arg) { case "-h": Console.WriteLine(StringResources.TITLE + " " + Assembly.GetEntryAssembly().GetName().Version); Console.WriteLine(String.Format(StringResources.CONSOLE_HELP, args[0])); return; case "-o": if (next != null) { throw new FormatException( String.Format(StringResources.CONSOLE_MISSING_ARGUMENT, lastOption)); } next = file => { if (File.Exists(file)) { try { using (var s = File.Open(file, FileMode.Open)) { var f = new BinaryFormatter(); matches = f.Deserialize(s) as Match[]; } } catch (Exception e) { throw new FormatException( StringResources.BAD_MATCH_COLLECTION_FORMAT + ": " + e.Message); } } outputMatchCollectionPath = file; }; break; case "-l": if (next != null) { throw new FormatException( String.Format(StringResources.CONSOLE_MISSING_ARGUMENT, lastOption)); } next = file => outputLogPath = file; break; case "-u": if (next != null) { throw new FormatException( String.Format(StringResources.CONSOLE_MISSING_ARGUMENT, lastOption)); } next = url => BotzoneProtocol.Credentials.BotzoneCopiedURL = url; break; case "--simple-io": LocalProgramRunner.IsSimpleIO = true; break; default: if (next != null) { next(arg); next = null; } else { requiredArguments.Add(arg); } break; } lastOption = arg; } if (next != null) { throw new FormatException( String.Format(StringResources.CONSOLE_MISSING_ARGUMENT, lastOption)); } if (requiredArguments.Count < 2) { throw new FormatException(StringResources.CONSOLE_BAD_FORMAT); } // 生成对局配置 conf = new MatchConfiguration { Game = new Game { Name = requiredArguments[0], PlayerCount = requiredArguments.Count - 1 } }; for (int i = 0; i < conf.Count; i++) { string arg = requiredArguments[i + 1]; if (File.Exists(arg)) { conf[i].Type = PlayerType.LocalAI; } else if (arg.Length == 24 && arg.All(c => c >= '0' && c <= '9' || c >= 'a' && c <= 'f')) { conf[i].Type = PlayerType.BotzoneBot; } else { throw new FormatException( String.Format(StringResources.CONSOLE_BAD_ID, arg)); } conf[i].ID = arg; } if (!conf.IsValid) { throw new FormatException(conf.ValidationString); } } catch (FormatException e) { Logger.Log(LogLevel.Error, e.Message); Console.WriteLine(String.Format(StringResources.CONSOLE_HELP, args[0])); return; } if (conf.IsLocalMatch) { Logger.Log(LogLevel.Info, StringResources.CONSOLE_LOCALMATCH); Cef.Initialize(new CefSettings { Locale = CultureInfo.CurrentCulture.Name }); var tcs = new TaskCompletionSource <object>(); var b = new CefSharp.OffScreen.ChromiumWebBrowser(); BotzoneProtocol.CurrentBrowser = b; b.BrowserInitialized += delegate { tcs.SetResult(null); }; tcs.Task.Wait(); } else { Logger.Log(LogLevel.Info, StringResources.CONSOLE_BOTZONEMATCH); if (!BotzoneProtocol.Credentials.IsValid) { Logger.Log(LogLevel.Error, StringResources.CONSOLE_BAD_LOCALAI_URL); Console.WriteLine(String.Format(StringResources.CONSOLE_HELP, args[0])); return; } } try { // 创建并开始对局 var matchTask = conf.CreateMatch(); matchTask.Wait(); var match = matchTask.Result; Console.CancelKeyPress += delegate { match.AbortMatch().Wait(); }; match.RunMatch().Wait(); string logJson = JsonConvert.SerializeObject(match.Logs); if (outputLogPath != null) { using (var sw = new StreamWriter(outputLogPath)) { sw.WriteLine(logJson); } } if (outputMatchCollectionPath != null) { using (var s = File.Open(outputMatchCollectionPath, FileMode.Create)) { var tempMatches = new Match[matches?.Length ?? 0]; matches?.CopyTo(tempMatches, 0); tempMatches[tempMatches.Length - 1] = match; var f = new BinaryFormatter(); f.Serialize(s, tempMatches); } } Console.WriteLine(logJson); Console.WriteLine( (match.Status == MatchStatus.Finished ? "finished " : "aborted ") + String.Join(" ", match.Scores)); } catch (Exception e) { Logger.Log(LogLevel.Error, e.Message); Console.WriteLine("error"); } finally { Cef.Shutdown(); } }
// The task that creates the PNG. private static async void Screenshot(string filename) { // Create the offscreen Chromium browser. using (var browser = new CefSharp.OffScreen.ChromiumWebBrowser()) { browser.LoadHtml("<html><head></head><body></body></html>", "http://rendering/"); switch (Help.TemplateName) { case "Valloric's Statblock": browser.LoadHtml(Monster.ValloricStatBlock(), "http://rendering/"); break; case "AshenGT's Statblock": browser.LoadHtml(Monster.AshenGTStatBlock(), "http://rendering/"); break; case "Custom Statblock": browser.LoadHtml(Monster.CustomStatBlock(), "http://rendering/"); break; case "Future": browser.LoadHtml(Monster.FutureStatBlock(), "http://rendering/"); break; } saveFilename = filename; await Help.Delay(500); int width = (Monster.width + (Monster.width * Monster.columns)) + 40; int height = 0; while (height == 0) { height = BrowserInfo.BrowserHeight(browser); System.Threading.Thread.Sleep(100); } browser.Size = new Size(width, height); await Help.Delay(500); await browser.ScreenshotAsync().ContinueWith(DisplayBitmap); } }