示例#1
0
        static async Task <Browser> FetchAndLaunchBrowser()
        {
            var browserFetcher = new BrowserFetcher();
            var revision       = await browserFetcher.DownloadAsync();

            var launchOptions = new LaunchOptions {
                ExecutablePath = revision.ExecutablePath
            };

            return(await Puppeteer.LaunchAsync(launchOptions));
        }
示例#2
0
        /// <inheritdoc/>
        public HeadfulTests(ITestOutputHelper output) : base(output)
        {
            string extensionPath = TestUtils.GetWebServerFile("simple-extension");

            _extensionOptions          = TestConstants.GetDefaultBrowserOptions();
            _extensionOptions.Headless = false;
            _extensionOptions.Args     = new[]
            {
                $"--disable-extensions-except={extensionPath}",
                $"--load-extension={extensionPath}"
            };
        }
示例#3
0
        /// <summary> Instantiates a headless chrome browser and a page object to hold the rendered
        /// objects.
        /// </summary>
        /// <returns></returns>
        async Task CreateBrowserAndPageAsync()
        {
            var options = new LaunchOptions {
                Headless = true
            };

            await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);

            this.browser = await Puppeteer.LaunchAsync(options);

            this.page = await browser.NewPageAsync();
        }
示例#4
0
        public async Task using_Page()
        {
            var options = new LaunchOptions {
                Headless = true
            };

            await using var browser = await Puppeteer.LaunchAsync(options);

            await using var page = await browser.NewPageAsync();

            // ...
        }
示例#5
0
        /// <inheritdoc/>
        public HeadfulTests(ITestOutputHelper output) : base(output)
        {
            string extensionPath = Path.Combine(Directory.GetCurrentDirectory(), "Assets", "simple-extension");

            _extensionOptions          = TestConstants.GetDefaultBrowserOptions();
            _extensionOptions.Headless = false;
            _extensionOptions.Args     = new[]
            {
                $"--disable-extensions-except={extensionPath}",
                $"--load-extension={extensionPath}"
            };
        }
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            var           ver     = (KMCCC.Launcher.Version)comboBox1.SelectedItem;
            LaunchOptions options = new LaunchOptions
            {
                JavaPath  = javapath.Text,
                Version   = ver,              //Ver为Versions里你要启动的版本名字
                MaxMemory = 1024,             //最大内存,int类型
                //Authenticator = new OfflineAuthenticator("Xiao_yejun"), //离线启动
                Mode = LaunchMode.MCLauncher, //启动模式,这个我会在后面解释有哪几种
                Size = new WindowSize {
                    Height = 768, Width = 1280
                }                                                    //设置窗口大小,可以不要
            };

            if ((bool)zb.IsChecked)
            {
                options.Authenticator = new YggdrasilLogin(youxiang.Text, mima.Text, false);
            }
            else
            {
                options.Authenticator = new OfflineAuthenticator("Xiao_yejun"); //离线启动
            }

            var result = Core.Launch(options);



            //Authenticator = new YggdrasilLogin("邮箱", "密码", true),
            //case ErrorType.AuthenticationFailed:
            //MessageBox.Show(this, "正版验证失败!请检查你的账号密码", "账号错误\n详细信息:" + result.ErrorMessage,MessageBoxButtons.OK,MessageBoxIcon.Error);
            if (!result.Success)
            {
                switch (result.ErrorType)
                {
                case ErrorType.AuthenticationFailed:
                    MessageBox.Show(this, "正版验证失败!请检查你的账号密码", "账号错误\n详细信息:" + result.ErrorMessage);
                    break;

                case ErrorType.NoJAVA:
                    MessageBox.Show(result.ErrorMessage + "你没有java哦");
                    break;

                case ErrorType.UncompressingFailed:
                    MessageBox.Show(result.ErrorMessage + "文件损坏了呢");
                    break;

                default:
                    MessageBox.Show(result.ErrorMessage + "启动错误");
                    break;
                }
            }
        }
示例#7
0
        public PptStreamer(LaunchOptions opts)
        {
            System.Diagnostics.Debug.WriteLine("PptStreamer");
            LaunchOpts = opts;

            Disposed = false;
            Quit     = false;

            StreamDelay  = TimeSpan.FromMilliseconds(50);
            StreamThread = new Thread(new ThreadStart(StreamRoutine));
            StreamThread.Start();
        }
示例#8
0
        public PuppeteerSharpHttpHelper()
        {
            new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision).Wait();
            var launchOptions = new LaunchOptions {
                Headless = true
            };

            if (_browser == null)
            {
                _browser = Puppeteer.LaunchAsync(launchOptions).GetAwaiter().GetResult();
            }
        }
        public async Task <Browser> LaunchAsync(string[] chromeArgs)
        {
            var chromeLocation = new ChromiumExtractor(loggerFactory).ExtractChromium();

            var launchOptions = new LaunchOptions()
            {
                ExecutablePath = chromeLocation,
                Args           = chromeArgs,
                Headless       = true
            };

            return(await new Launcher(loggerFactory).LaunchAsync(launchOptions));
        }
示例#10
0
        static PupeeteerTool()
        {
            ops = new NavigationOptions()
            {
                Timeout = 120000,
            };

            options = new LaunchOptions
            {
                Headless = true,
                /// pipe options is missing, may be in version 1.1.0
            };
        }
示例#11
0
        public static void RunParsed(LaunchOptions options)
        {
            EnviromentManager.Init();

            EnviromentManager.LaunchOptions = options;

            if (!options.Silent)
            {
                var app = new App();
                app.InitializeComponent();
                app.Run();
            }
        }
示例#12
0
 public when_no_list_nor_wait_command_set()
 {
     options = new LaunchOptions()
     {
         DotNet = new LaunchOptions.DotNetPart()
         {
             Project    = testAssemblyPath,
             DesignTime = true,
             Port       = 123,
         },
         NSpec = new LaunchOptions.NSpecPart(),
     };
 }
示例#13
0
文件: VkBrwUser.cs 项目: a-postx/Pyhh
        private async Task <Browser> GetNewBrowserAsync()
        {
            await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);

            LaunchOptions browserOptions = new LaunchOptions
            {
                Headless = true, Args = new string[] { "--lang=" + Vkontakte.Language.ToString().ToLowerInvariant() }
            };

            Browser browser = await Puppeteer.LaunchAsync(browserOptions);

            return(browser);
        }
示例#14
0
        public async Task <byte[]> GenerateReport(bool headless)
        {
            Console.WriteLine(MessageResources.GenerateReportLaunching);
            var opt = new LaunchOptions
            {
                Headless        = headless,
                Args            = new[] { "--no-sandbox" },
                DefaultViewport = new ViewPortOptions
                {
                    Width  = _settings.Viewport.Width,
                    Height = _settings.Viewport.Height
                },
                ExecutablePath = _settings.ChromiumPath
            };

            using var browser = await Puppeteer.LaunchAsync(opt);

            using var page = await browser.NewPageAsync();

            Console.WriteLine(MessageResources.GenerateReportLoggingIn);
            await page.GoToAsync("https://telkomdds.atlassian.net", WaitUntilNavigation.Networkidle0);

            await page.TypeAsync("#username", _settings.AtlassianAccount.Email);

            await page.ClickAsync("#login-submit");

            await page.WaitForSelectorAsync("#password", new WaitForSelectorOptions { Visible = true, Timeout = TimeoutDuration });

            await page.TypeAsync("#password", _settings.AtlassianAccount.Password);

            await page.ClickAsync("#login-submit");

            await page.WaitForSelectorAsync("#jira-frontend", new WaitForSelectorOptions { Visible = true, Timeout = TimeoutDuration });

            Console.WriteLine(MessageResources.GenerateReportScreenshot);
            await page.GoToAsync("https://telkomdds.atlassian.net/issues/?filter=11241", TimeoutDuration, new[] { WaitUntilNavigation.Networkidle0 });

            var img = await page.ScreenshotDataAsync();


            Console.WriteLine(MessageResources.GenerateReportLoggingOut);
            await page.GoToAsync("https://telkomdds.atlassian.net/logout", TimeoutDuration, new[] { WaitUntilNavigation.Networkidle0 });

            await page.CloseAsync();

            await browser.CloseAsync();

            await SaveReport(img);

            return(img);
        }
示例#15
0
        public static async Task PuppeteerOpenBrowser(BotData data)
        {
            data.Logger.LogHeader();
            PuppeteerSharp.Browser browser;

            var args = data.ConfigSettings.PuppeteerSettings.CommandLineArgs;

            if (data.Proxy != null && data.UseProxy)
            {
                args += $" --proxy-server={data.Proxy.Type.ToString().ToLower()}://{data.Proxy.Host}:{data.Proxy.Port}";
            }

            // Check if there is already an open browser
            if (!data.Objects.ContainsKey("puppeteer") || ((PuppeteerSharp.Browser)data.Objects["puppeteer"]).IsClosed)
            {
                // Configure the options
                var launchOptions = new LaunchOptions
                {
                    Args            = new string[] { args },
                    ExecutablePath  = data.Providers.PuppeteerBrowser.ChromeBinaryLocation,
                    Headless        = data.ConfigSettings.PuppeteerSettings.Headless,
                    DefaultViewport = null // This is important
                };

                // Add the plugins
                var extra = new PuppeteerExtra();
                extra.Use(new StealthPlugin());

                // Launch the browser
                browser = await extra.LaunchAsync(launchOptions);

                browser.IgnoreHTTPSErrors = data.ConfigSettings.PuppeteerSettings.IgnoreHttpsErrors;

                // Save the browser for further use
                data.Objects["puppeteer"] = browser;
                var page = (await browser.PagesAsync()).First();
                SetPageAndFrame(data, page);

                // Authenticate if the proxy requires auth
                if (data.UseProxy && data.Proxy != null && data.Proxy.NeedsAuthentication)
                {
                    await page.AuthenticateAsync(new Credentials { Username = data.Proxy.Username, Password = data.Proxy.Password });
                }

                data.Logger.Log($"{(launchOptions.Headless ? "Headless " : "")}Browser opened successfully!", LogColors.DarkSalmon);
            }
            else
            {
                data.Logger.Log("The browser is already open, close it if you want to open a new browser", LogColors.DarkSalmon);
            }
        }
示例#16
0
        private LaunchOptions CreateAttachLaunchOptions(uint processId, IDebugPort2 port)
        {
            LaunchOptions launchOptions;

            var unixPort = port as IDebugUnixShellPort;

            if (unixPort != null)
            {
                MIMode miMode;
                if (_engineGuid == EngineConstants.GdbEngine)
                {
                    miMode = MIMode.Gdb;
                }
                else if (_engineGuid == EngineConstants.LldbEngine)
                {
                    miMode = MIMode.Lldb;
                }
                else
                {
                    throw new NotImplementedException();
                }

                if (processId > int.MaxValue)
                {
                    throw new ArgumentOutOfRangeException(nameof(processId));
                }

                launchOptions = LaunchOptions.CreateForAttachRequest(unixPort,
                                                                     (int)processId,
                                                                     miMode,
                                                                     Logger);
            }
            else
            {
                // TODO: when we have a tools options page, we can add support for the attach dialog here pretty easily:
                //var defaultPort = port as IDebugDefaultPort2;
                //if (defaultPort != null && defaultPort.QueryIsLocal() == Constants.S_OK)
                //{
                //    launchOptions = new LocalLaunchOptions(...);
                //}
                //else
                //{
                //    // Invalid port
                //    throw new ArgumentException();
                //}

                throw new NotSupportedException();
            }

            return(launchOptions);
        }
示例#17
0
        public async Task <Browser> LaunchAsync(LaunchOptions options)
        {
            _plugins.ForEach(e => e.BeforeLaunch(options));
            var browser = await Puppeteer.LaunchAsync(options);

            _plugins.ForEach(e => e.AfterLaunch(browser));
            await OnStart(new BrowserStartContext()
            {
                StartType  = StartType.Launch,
                IsHeadless = options.Headless
            }, browser);

            return(browser);
        }
        static async Task Main(string[] args)
        {
            var style = new LaunchOptions {
                Headless = true
            };

            await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);
            Console.WriteLine("\nGet information from CGV...");

            using (var browser = await Puppeteer.LaunchAsync(style))
                using (var page = await browser.NewPageAsync()) {
                    await page.GoToAsync("https://www.cgv.id/en/movies/now_playing");

                    var jsSelectAllAnchors = await page.QuerySelectorAllHandleAsync(".movie-list-body > ul >li > a").EvaluateFunctionAsync <string[]> ("elements => elements.map(a => a.href)");

                    Console.WriteLine("\n=========Now Playing=========");
                    HtmlWeb web = new HtmlWeb();
                    for (int i = 0; i < jsSelectAllAnchors.Length; i++)
                    {
                        var htmlDoc = web.Load(jsSelectAllAnchors[i]);

                        Console.WriteLine("\n\n========================================================================================================");

                        var Title = htmlDoc.DocumentNode.SelectNodes("//div[@class='movie-info-title']");
                        foreach (var node in Title)
                        {
                            Console.WriteLine("\nTITLE :\n" + node.InnerText.Trim() + "\n");
                        }

                        var Starring = htmlDoc.DocumentNode.SelectNodes("//div[@class='movie-add-info left']/ul /li");
                        foreach (var node in Starring)
                        {
                            Console.WriteLine("> " + node.InnerText.Trim());
                        }

                        var Trailer = htmlDoc.DocumentNode.SelectNodes("//div[@class='trailer-btn-wrapper']/img");
                        foreach (var node in Trailer)
                        {
                            var getLink = node.GetAttributeValue("onclick", string.Empty);
                            Console.WriteLine("\n> TRAILER LINK : " + getLink.Remove(0, 11));
                        }

                        var Synopsis = htmlDoc.DocumentNode.SelectNodes("//div[@class='movie-synopsis right']");
                        foreach (var node in Synopsis)
                        {
                            Console.WriteLine("\n> SYNOPIS : " + node.InnerText.Trim());
                        }
                    }
                }
        }
        public async Task Setup()
        {
            ConfigurationHelper.Initialise(TestContext.CurrentContext.TestDirectory);
            DbHelper.ClearDb();
            IdentityHelpers.ClearAll();

            //todo: allow other actors (types of provider)
            //var providerActor = (ProviderActor)TestContext.CurrentContext.Test.Arguments.GetValue(0);
            var provider = Actors.Provider.Create();


            await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);

            var launchOptions = new LaunchOptions
            {
                Headless          = false,
                IgnoreHTTPSErrors = true,
                //SlowMo = 10
            };

            Console.WriteLine("Launching browser...");

            Browser = await Puppeteer.LaunchAsync(launchOptions);

            var context = Browser.DefaultContext;

            Page = await context.NewPageAsync();

            var url = LaunchPage.Url.Replace("{providerId}", provider.ProviderId.ToString());

            Console.WriteLine($"Opening {url}");
            var response = await Page.GoToAsync(url);

            //Realm selection
            await Page.ClickOn(LaunchPage.Realm);

            await Page.WaitForNavigationAsync();

            await Page.TypeInputAsync(LaunchPage.Username, provider.Username);

            await Page.TypeInputAsync(LaunchPage.Password, provider.Password);

            Console.Write("Signing in... ");
            await Page.Keyboard.DownAsync("Enter"); //hit enter, rather than click button

            await Page.WaitForSelectorAsync(".govuk-header");

            //await Page.WaitForNavigationAsync();
            Console.WriteLine("Complete");
        }
示例#20
0
        public LaunchResult Launch(LaunchOptionBase launchOption, params Action <MinecraftLaunchArguments>[] argumentsOperators)
        {
            if (UserAuthenticator == null)
            {
                FailedResult.ErrorType    = ErrorType.AuthenticationFailed;
                FailedResult.ErrorMessage = "User authenticator no set";
                Console.WriteLine("ERROR: User authenticator no set");
                return(FailedResult);
            }
            if (launchOption == null)
            {
                Console.WriteLine("ERROR: Launch message is null");
                FailedResult.ErrorMessage = "Launch message is null";
                return(FailedResult);
            }

            Core.JavaPath = launchOption.javaExt;

            //LaunchOptions in KMCCC, different with LaunchOption in OneMCL.Core
            LaunchOptions options = new LaunchOptions()
            {
                Version       = Core.GetVersion(launchOption.versionId),
                Authenticator = UserAuthenticator,
                GameDirPath   = string.IsNullOrEmpty(launchOption.gameDir) ? Core.GameRootPath : launchOption.gameDir,
            };

            Console.WriteLine("Launching...");

            int argsCount = 0;

            if (argumentsOperators != null)
            {
                argsCount = argumentsOperators.Length;
            }
            Action <MinecraftLaunchArguments>[] argsOpt = new Action <MinecraftLaunchArguments> [argsCount + 1];
            argsOpt[0] = (Action <MinecraftLaunchArguments>)(args =>
            {
                args.AdvencedArguments.Add(launchOption.javaArgs);
                System.Version osVersion = Environment.OSVersion.Version;
                args.AdvencedArguments.Add("-Dos.name=\"" + GetSystemVersionName(osVersion.Major, osVersion.Minor) + "\"");
                args.AdvencedArguments.Add("-Dos.version=" + osVersion.Major + "." + osVersion.Minor);
                args.AdvencedArguments.Add("-Dminecraft.launcher.brand=one-minecraft-launcher");
                //args.AdvencedArguments.Add("-Dminecraft.launcher.version=");
                args.AdvencedArguments.Add("-Dminecraft.client.jar=" + Core.GetVersionJarPath(options.Version));
                //args.AdvencedArguments.Add("-Dlog4j.configurationFile=");
            });
            argumentsOperators?.CopyTo(argsOpt, 1);
            return(Core.Launch(options, argsOpt));
        }
示例#21
0
        public static async Task Main(string[] args)
        {
            var options = new LaunchOptions {
                Headless = true
            };

            Console.WriteLine("Downloading Chromium");
            await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);
            Console.WriteLine("Goes to CGV Now PLaying");

            using (var browser = await Puppeteer.LaunchAsync(options))
                using (var page = await browser.NewPageAsync())
                {
                    await page.GoToAsync("https://www.cgv.id/en/movies/now_playing");

                    var list = await page.QuerySelectorAllHandleAsync(".movie-list-body > ul >li > a").EvaluateFunctionAsync <string[]>("elements => elements.map(a => a.href)");

                    Console.WriteLine("Movie List");
                    for (int i = 0; i < list.Length; i++)
                    {
                        Console.WriteLine("==========================================================================================================");
                        Console.WriteLine("");
                        HtmlWeb web     = new HtmlWeb();
                        var     htmlDoc = web.Load(list[i]);
                        var     nodes1  = htmlDoc.DocumentNode.SelectNodes("//div[@class='movie-info-title']");
                        foreach (var x in nodes1)
                        {
                            Console.WriteLine(x.InnerHtml.Trim());
                        }
                        var nodes2 = htmlDoc.DocumentNode.SelectNodes("//div[@class='trailer-btn-wrapper']/img");
                        foreach (var x in nodes2)
                        {
                            Console.WriteLine("Trailer : " + x.GetAttributeValue("onclick", string.Empty).Substring(11));
                        }
                        Console.WriteLine("PRODUCER : -");
                        var nodes3 = htmlDoc.DocumentNode.SelectNodes("//div[@class='movie-add-info left']/ ul / li");
                        foreach (var x in nodes3)
                        {
                            Console.WriteLine(x.InnerHtml.Trim());
                        }
                        var nodes4 = htmlDoc.DocumentNode.SelectNodes("//div[@class='movie-synopsis right']");
                        foreach (var x in nodes4)
                        {
                            Console.WriteLine("SINOPSIS : " + x.InnerText.Trim());
                        }
                        Console.WriteLine();
                    }
                }
        }
示例#22
0
        public static async Task Main(string[] args)
        {
            var options = new LaunchOptions
            {
                Headless       = true,
                DumpIO         = false,
                ExecutablePath = args[0]
            };

            using (var browser = await Puppeteer.LaunchAsync(options))
            {
                Console.WriteLine(browser.WebSocketEndpoint);
                Console.ReadLine();
            }
        }
示例#23
0
        private static async Task <Browser> PrepareHeadlessBrowser(bool isHeadless)
        {
            var options = new LaunchOptions
            {
                Headless = isHeadless,
                Timeout  = 0,
            };

            Console.WriteLine("Downloading chromium (if needed)");
            await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);

            var browser = await Puppeteer.LaunchAsync(options);

            return(browser);
        }
示例#24
0
        public static async Task Main(string[] args)
        {
            var options = new LaunchOptions
            {
                Headless       = true,
                DumpIO         = true,
                ExecutablePath = args[1]
            };

            using (var browser = await Puppeteer.LaunchAsync(options))
                using (var page = await browser.NewPageAsync())
                {
                    await page.EvaluateFunctionAsync("_dumpioTextToLog => console.log(_dumpioTextToLog)", args[0]);
                }
        }
示例#25
0
        public AndroidLaunchOptions(MICore.Xml.LaunchOptions.AndroidLaunchOptions xmlOptions, TargetEngine targetEngine)
        {
            if (xmlOptions == null)
            {
                throw new ArgumentNullException("xmlOptions");
            }

            this.Package  = LaunchOptions.RequireAttribute(xmlOptions.Package, "Package");
            this.IsAttach = xmlOptions.Attach;
            if (!IsAttach)
            {
                // LaunchActivity is only required when we're launching
                this.LaunchActivity = LaunchOptions.RequireAttribute(xmlOptions.LaunchActivity, "LaunchActivity");
            }
            this.SDKRoot            = GetOptionalDirectoryAttribute(xmlOptions.SDKRoot, "SDKRoot");
            this.NDKRoot            = GetOptionalDirectoryAttribute(xmlOptions.NDKRoot, "NDKRoot");
            this.TargetArchitecture = LaunchOptions.ConvertTargetArchitectureAttribute(xmlOptions.TargetArchitecture);

            if (targetEngine == TargetEngine.Native)
            {
                this.IntermediateDirectory = RequireValidDirectoryAttribute(xmlOptions.IntermediateDirectory, "IntermediateDirectory");
            }
            else
            {
                this.IntermediateDirectory = GetOptionalDirectoryAttribute(xmlOptions.IntermediateDirectory, "IntermediateDirectory");
            }

            if (targetEngine == TargetEngine.Java)
            {
                this.JVMHost = LaunchOptions.RequireAttribute(xmlOptions.JVMHost, "JVMHost");
                this.JVMPort = xmlOptions.JVMPort;

                this.SourceRoots = GetSourceRoots(xmlOptions.SourceRoots);

                foreach (SourceRoot root in this.SourceRoots)
                {
                    EnsureValidDirectory(root.Path, "SourceRoots");
                }
            }

            this.AdditionalSOLibSearchPath     = xmlOptions.AdditionalSOLibSearchPath;
            this.AbsolutePrefixSOLibSearchPath = xmlOptions.AbsolutePrefixSOLibSearchPath ?? "\"\"";
            this.DeviceId           = LaunchOptions.RequireAttribute(xmlOptions.DeviceId, "DeviceId");
            this.LogcatServiceId    = GetLogcatServiceIdAttribute(xmlOptions.LogcatServiceId);
            this.WaitDynamicLibLoad = xmlOptions.WaitDynamicLibLoad;

            CheckTargetArchitectureSupported();
        }
示例#26
0
        private async Task <Browser> CreateWebBrowser(string ChromePath)
        {
            async Task <WebSocket> CreateWebSocketTask(Uri url, IConnectionOptions options, CancellationToken cancellationToken)
            {
                var result = new System.Net.WebSockets.Managed.ClientWebSocket();

                result.Options.KeepAliveInterval = TimeSpan.Zero;
                await result.ConnectAsync(url, cancellationToken).ConfigureAwait(false);

                return(result);
            }

            var downloadChrome = string.IsNullOrEmpty(ChromePath) || !File.Exists(ChromePath);

            if (downloadChrome)
            {
                Debug.Write("downloading Chrome...");
                var browserFetcherOptions = new BrowserFetcherOptions
                {
                    Path     = $"{AppDomain.CurrentDomain.BaseDirectory}",
                    Platform = Platform.Win64,
                    Product  = Product.Chrome
                };
                var browserFetcher = new BrowserFetcher(browserFetcherOptions);
                var revisionInfo   = await browserFetcher.DownloadAsync();

                ChromePath = revisionInfo.ExecutablePath;  // set the created chrome path
                Debug.WriteLine("done!");
            }

            var launchOptions = new LaunchOptions
            {
                Headless          = false,
                Timeout           = (10 * 1000), // 10 sec
                ExecutablePath    = ChromePath,  /// $"{AppDomain.CurrentDomain.BaseDirectory}Win64-884014\\chrome-win\\chrome.exe",
                DefaultViewport   = null,        // max resolution
                IgnoreHTTPSErrors = true,
                Args = new[] { "--no-sandbox", "--disable-gpu" }  // "--window-size=800,1080"
            };

            if (Environment.OSVersion.Version.Major < 10)
            {
                launchOptions.WebSocketFactory = CreateWebSocketTask;  // support for windows-7
            }
            var browser = await Puppeteer.LaunchAsync(launchOptions);

            return(browser);
        }
示例#27
0
        protected internal T ExecuteJsCommand <T>(string url, string jsCommand)
        {
            var options = new LaunchOptions {
                Headless = true
            };

            using (var browser = Puppeteer.LaunchAsync(options).Result)
            {
                using (var page = browser.NewPageAsync().Result)
                {
                    _ = page.GoToAsync(url).Result;

                    return(page.EvaluateExpressionAsync <T>(jsCommand).Result);
                }
            }
        }
示例#28
0
        private string GetChromeExecutablePath(LaunchOptions options)
        {
            string chromeExecutable = options.ExecutablePath;

            if (string.IsNullOrEmpty(chromeExecutable))
            {
                chromeExecutable = ResolveExecutablePath();
            }

            if (!File.Exists(chromeExecutable))
            {
                throw new FileNotFoundException("Failed to launch chrome! path to executable does not exist", chromeExecutable);
            }

            return(chromeExecutable);
        }
示例#29
0
        public override void BeforeLaunch(LaunchOptions options)
        {
            var args = options.Args.ToList();
            var idx  = args.FindIndex(e => e.StartsWith("--disable-blink-features="));

            if (idx != -1)
            {
                var arg = args[idx];
                args[idx] = $"{arg}, AutomationControlled";
                return;
            }

            args.Add("--disable-blink-features=AutomationControlled");

            options.Args = args.ToArray();
        }
        public LaunchResult Run()
        {
            var launchercore =
                LauncherCore.Create(new LauncherCoreCreationOption(javaPath: Config.Instance.JavaPath));

            launchercore.GameLog  += OnGameLog;
            launchercore.GameExit += (handle, i) =>
            {
                OnGameExit?.Invoke(handle, i);
                IsRunning = false;
            };
            var launchOptions = new LaunchOptions
            {
                Version       = launchercore.GetVersion(Definitions.ClientName),
                Authenticator = new OfflineAuthenticator(Config.Instance.PlayerAccount.Username),
                Mode          = LaunchMode.BmclMode,
                MaxMemory     = Config.Instance.MaxMemory
            };

            var result = launchercore.Launch(launchOptions, x =>
            {
                if (Config.Instance.JavaArguments.Contains("G1GC"))
                {
                    x.CGCEnabled = false;
                }
                x.AdvencedArguments.Add(Config.Instance.JavaArguments);
            });

            IsRunning = true;

            if (!result.Success)
            {
                OnError?.Invoke(result);
                IsRunning = false;
            }


            return(result);

            /*
             * result.Handle.GetPrivateField<Process>(nameof(Process)).Exited += (sender, args) =>
             * {
             *  IsRunning = false;
             *  OnGameExit?.Invoke();
             * };
             */
        }