Example #1
0
 private static Task InstallAsync(InstallBrowsersOptions opts) => Playwright.InstallAsync(browsersPath: opts.Path);
        internal async Task Run()
        {
            _logger.LogInformation(" - Start Job -");
            #region previous records and config file
            var records = new List <Dictionary <string, string> >();
            var config  = new Dictionary <string, string>();
            #endregion

            using (var jsonOp = new JsonOP()) {
                _logger.LogInformation("Loading previous records...");
                #region load previous records
                try {
                    records = jsonOp.LoadData(recordPath);                    // load previous free game info
                } catch (Exception e) {
                    _logger.LogError("Error loading previous records !");
                    _logger.LogError("Error message: { 0}\n", e.Message);
                }
                #endregion
                _logger.LogInformation("Done");

                _logger.LogInformation("Loading configurations...");
                #region load config
                try {
                    config = jsonOp.LoadConfig(path: configPath);
                } catch (Exception e) {
                    _logger.LogError("Error loading config file !");
                    _logger.LogError("Error message: {0}", e.Message);
                }
                #endregion
                _logger.LogInformation("Done");
            }

            _logger.LogInformation("Getting page source...");
            var htmlDoc = new HtmlDocument();
            #region playright varialbles
            using var playwright = await Playwright.CreateAsync();

            await using var browser = await playwright.Webkit.LaunchAsync(new() { Headless = true });

            #endregion

            #region load page
            try {
                var page = await browser.NewPageAsync();

                await page.GotoAsync(SteamDBUrl);

                Thread.Sleep(firstDelay);
                htmlDoc.LoadHtml(await page.InnerHTMLAsync("*"));
                _logger.LogInformation("Done");
            } catch (Exception ex) {
                _logger.LogError("Get source error!");
                _logger.LogError("Error message: {0}", ex.Message);
            } finally {
                await browser.CloseAsync();
            }
            #endregion

            _logger.LogInformation("Start data processing...");
            await StartProcess(htmlDoc : htmlDoc, records : records, chat_id : config["CHAT_ID"], token : config["TOKEN"]);

            _logger.LogInformation("Done");

            _logger.LogInformation(" - End Job -");
        }
Example #3
0
 public ChromiumInstance()
 {
     playwright = Playwright.CreateAsync().GetAwaiter().GetResult();
     browser    = playwright.Chromium.LaunchAsync().GetAwaiter().GetResult();
     page       = browser.NewPageAsync().GetAwaiter().GetResult();
 }
Example #4
0
 private static Task InstallDriverAsync(InstallDriverOptions opts)
 {
     Playwright.InstallDriver(opts.Path ?? ".");
     return(Task.CompletedTask);
 }
Example #5
0
        public async Task DecileSummaryCPP()
        {
            await Playwright.InstallAsync();

            using var playwright = await Playwright.CreateAsync();

            await using var browser = await playwright.Chromium.LaunchAsync(
                            headless : false,
                            slowMo : 500

                            );

            var context = await browser.NewContextAsync();

            //// Open new page
            var page = await context.NewPageAsync();

            await page.GoToAsync("https://qafour.profitstarsfps.com");

            // await login.LoginFPS("DMLTest12", "Kiara%%%");

            //// Click [placeholder="Enter User Name"]
            await page.ClickAsync("[placeholder=\"Enter User Name\"]");

            //Fill [placeholder="Enter User Name"]
            await page.FillAsync("[placeholder=\"Enter User Name\"]", "mpantoja");

            //  Press Tab
            await page.PressAsync("[placeholder=\"Enter User Name\"]", "Tab");

            //// Fill [aria-label="Password"]
            await page.FillAsync("[aria-label=\"Password\"]", "Kiara###");

            //Press Enter
            await Task.WhenAll(
                page.WaitForNavigationAsync(/*"https://qafour.profitstarsfps.com/"*/),
                page.PressAsync("[aria-label=\"Password\"]", "Enter"));

            await page.GoToAsync("https://qasp.profitstarsfps.com/#/home");



            // Go to https://qafour.profitstarsfps.com/#/dashboard
            await page.GoToAsync("https://qafour.profitstarsfps.com/#/dashboard");

            // Click text=REPORTING
            await page.ClickAsync("text=REPORTING");

            // Click text=Create Reports
            await Task.WhenAll(
                page.WaitForNavigationAsync(/*"https://qafour.profitstarsfps.com/#/createReports?userSelection=%7B%229%22:29,%2223%22:0%7D"*/),
                page.ClickAsync("text=Create Reports"));

            // Click input[type="text"]
            await page.ClickAsync("input[type=\"text\"]");

            // Fill input[type="text"]
            await page.FillAsync("input[type=\"text\"]", "Decile Summary");

            // Click text=Decile Summary
            // Press Enter
            await page.PressAsync("input[type=\"text\"]", "Enter");

            // Assert.Equal("https://qafour.profitstarsfps.com/#/createReports?userSelection=%7B%229%22:49,%2223%22:0%7D", page.Url);
            // Fill input[name="_Option1"]
            // await page.FillAsync("input[name=\"_Option1\"]", "1");
            // Click input[name="_Option1"]
            await page.ClickAsync("input[name=\"_Option1\"]");

            // Click text=PDF
            await page.ClickAsync("text=PDF");

            // Click text=Generate
            await page.ClickAsync("text=Generate");

            // Click text=View Reports
            await page.ClickAsync("text=View Reports");

            // Assert.Equal("https://qafour.profitstarsfps.com/#/viewReports", page.Url);
            // Click text=Decile Summary PDF04/20/2021 8:16 PM 1 Selected >> span
            await page.WaitForSelectorAsync("// html / body / div[2] / div[1] / div / section / div[2] / div[2] / div / div / div[3] / form / div / div / div[3] / table / tbody / tr / td[1] / div / div / span");

            // await page.ClickAsync("text=Decile Summary PDF04/20/2021 8:16 PM 1 Selected >> span");
            // Click td[role="gridcell"] span
            await page.ClickAsync("td[role=\"gridcell\"] span");

            // Click text=Delete
            await page.ClickAsync("text=Delete");

            // Click text=Yes
            await page.ClickAsync("text=Yes");

            // Click text=Create Reports
            await Task.WhenAll(
                page.WaitForNavigationAsync(/*"https://qafour.profitstarsfps.com/#/createReports?userSelection=%7B%229%22:29,%2223%22:0%7D"*/),
                page.ClickAsync("text=Create Reports"));

            // Assert.Equal("https://qafour.profitstarsfps.com/#/createReports?userSelection=%7B%7D", page.Url);
            // ---------------------
        }
Example #6
0
        public async Task ShouldReturnChildProcessInstance()
        {
            using var browserApp = await Playwright.LaunchBrowserAppAsync(TestConstants.GetDefaultBrowserOptions());

            Assert.True(browserApp.Process.Id > 0);
        }
Example #7
0
        public async Task CustRankingFavorite()
        {
            //Context Context;
            //LogIn login = null;
            //LogOff logOff = null;

            //public LogInSteps(Context context)
            //{
            //    Context = context;
            //    login = new LogIn(Context.Page);
            //    logOff = new LogOff(Context.Page);
            //}
            //await login.LoginFPS("DMLTest12", "Kiara%%%");



            string baseNameFavRep = "AAA BB Fav ";

            string dateappend     = DateTime.Now.ToString();
            string dateappend1    = dateappend.Replace("/", "");
            string dateappend2    = dateappend1.Replace(":", "");
            string faveAppendName = baseNameFavRep + dateappend2;

            await Playwright.InstallAsync();

            using var playwright = await Playwright.CreateAsync();

            await using var browser = await playwright.Chromium.LaunchAsync(
                            headless : false,
                            slowMo : 500

                            );

            var context = await browser.NewContextAsync();

            //// Open new page
            var page = await context.NewPageAsync();

            await page.GoToAsync("https://qafour.profitstarsfps.com");


            //// Click [placeholder="Enter User Name"]
            await page.ClickAsync("[placeholder=\"Enter User Name\"]");

            //Fill [placeholder="Enter User Name"]
            await page.FillAsync("[placeholder=\"Enter User Name\"]", "mpantoja");

            //  Press Tab
            await page.PressAsync("[placeholder=\"Enter User Name\"]", "Tab");

            //// Fill [aria-label="Password"]
            await page.FillAsync("[aria-label=\"Password\"]", "Kiara###" +
                                 "");

            //Press Enter
            await Task.WhenAll(
                page.WaitForNavigationAsync(/*"https://qafour.profitstarsfps.com/"*/),
                page.PressAsync("[aria-label=\"Password\"]", "Enter"));

            await page.GoToAsync("https://qafour.profitstarsfps.com/#/home");

            await page.GoToAsync("https://qafour.profitstarsfps.com/#/dashboard");

            // Click text=REPORTING
            await page.ClickAsync("text=REPORTING");

            // Click text=Create Reports
            await Task.WhenAll(
                page.WaitForNavigationAsync(/*"https://qafour.profitstarsfps.com/#/createReports?userSelection=%7B%229%22:29,%2223%22:0%7D"*/),
                page.ClickAsync("text=Create Reports"));

            // Click input[type="text"]
            await page.ClickAsync("input[type=\"text\"]");

            // Fill input[type="text"]
            await page.FillAsync("input[type=\"text\"]", "Customer Ranking");

            // Press Enter
            await page.PressAsync("input[type=\"text\"]", "Enter");

            // Assert.Equal("https://qafour.profitstarsfps.com/#/createReports?userSelection=%7B%229%22:46,%2223%22:0%7D", page.Url);
            // Check input[name="Save as Favorite"]
            await page.CheckAsync("input[name=\"Save as Favorite\"]");

            // Click input[name="favoriteNameInputField"]
            await page.ClickAsync("input[name=\"favoriteNameInputField\"]");

            // Fill input[name="favoriteNameInputField"]
            await page.FillAsync("input[name=\"favoriteNameInputField\"]", faveAppendName);

            // Click text=Excel
            await page.ClickAsync("text=Excel");

            // Click text=Save
            await page.ClickAsync("text=Save");

            // Click text=Favorites
            await page.ClickAsync("text=Favorites");

            // Assert.Equal("https://qafour.profitstarsfps.com/#/createReports?userSelection=%7B%229%22:1,%2223%22:1%7D", page.Url);
            // Click #scrollCanvas

            await page.ClickAsync("text=View Reports");

            // Assert.Equal("https://qafour.profitstarsfps.com/#/viewReports", page.Url);
            // Click text=Create Reports
            await Task.WhenAll(
                page.WaitForNavigationAsync(/*"https://qafour.profitstarsfps.com/#/createReports?userSelection=%7B%229%22:29,%2223%22:0%7D"*/),
                page.ClickAsync("text=Create Reports"));

            // Assert.Equal("https://qafour.profitstarsfps.com/#/createReports?userSelection=%7B%7D", page.Url);
            // Click text=Favorites
            await page.ClickAsync("text=Favorites");

            // Assert.Equal("https://qafour.profitstarsfps.com/#/createReports?userSelection=%7B%229%22:1,%2223%22:1%7D", page.Url);
            // Click input[type="text"]
            await page.ClickAsync("input[type=\"text\"]");

            // Fill input[type="text"]
            await page.FillAsync("input[type=\"text\"]", faveAppendName);

            // Click text=AAA BB Fav 4212021 93938 PM
            await page.ClickAsync("text=" + faveAppendName);

            // below is just a sort of stub area until we can figure out the scroll canvas issue

            //  await page.FocusAsync("#delete4");

            // await page.QuerySelectorAllAsync("#delete3");
            // await page.GetAttributeAsync("delete3",);

            // await page.ClickAsync(clickX);
            // await page.GetAttributeAsync("#delete3",faveAppendName);

            //await page.ClickAsync("//*[@id='delete4']");

            // await page.ClickAsync("//div[@id='SelectionPanelTreeview']//*[@id='delete3']");

            //  < span id = "delete4" class="treeview-node-button fa fa-times" ng-style="{left: node.deleteButtonLeft, position: 'absolute'}" ng-click="vm.deleteNode($index)" ng-class="node.deleteButtonClass" style="left: 584px; position: absolute;">
            //          </span>

            //await page.ClickAsync("#delete3", force: true);

            // ---------------------
        }
 /// <inheritdoc cref="IAsyncLifetime.InitializeAsync"/>
 public virtual async Task InitializeAsync()
 => Browser = await Playwright.LaunchAsync(TestConstants.GetDefaultBrowserOptions());
Example #9
0
 public static void Main(string[] args)
 {
     Playwright.InstallAsync();
     CreateHostBuilder(args).Build().Run();
 }
Example #10
0
        public async Task <Checker> BuildAsync()
        {
            var quickBulletSettings = JsonConvert.DeserializeObject <QuickBulletSettings>(File.ReadAllText(settingsFile));

            var loliScriptManager = new LoliScriptManager();

            (var configSettings, var blocks) = loliScriptManager.Build(_configFile);

            if (string.IsNullOrEmpty(configSettings.Name))
            {
                configSettings.Name = Path.GetFileNameWithoutExtension(_configFile);
            }

            if (!string.IsNullOrEmpty(configSettings.AdditionalInfo))
            {
                AnsiConsole.MarkupLine($"[grey]CONFIG INFO:[/] {configSettings.AdditionalInfo}");
            }

            if (configSettings.CustomInputs.Any())
            {
                AnsiConsole.Write(new Rule("[darkorange]Custom input[/]").RuleStyle("grey").LeftAligned());

                foreach (var customInput in configSettings.CustomInputs)
                {
                    customInput.Value = AnsiConsole.Ask <string>($"{customInput.Description}:");
                }
            }

            var botInputs = File.ReadAllLines(_wordlistFile).Where(w => !string.IsNullOrEmpty(w)).Select(w => new BotInput(w));

            if (configSettings.InputRules.Any())
            {
                botInputs = botInputs.Where(b => configSettings.InputRules.All(i => _checkInputRuleFunctions[i.Name].Invoke(b, i)));
            }

            var useProxy = _proxies.Any();

            var proxyHttpClients = _proxies.Any() ? new List <ProxyHttpClient>(_proxies.Select(p => BuildProxy(p, _proxyType)).Select(p => new ProxyHttpClient(new HttpClientHandler()
            {
                UseCookies = false, Proxy = p
            }, p)
            {
                Timeout = TimeSpan.FromSeconds(15)
            })) : new List <ProxyHttpClient>()
            {
                new ProxyHttpClient(new HttpClientHandler()
                {
                    UseCookies = false
                }, null)
                {
                    Timeout = TimeSpan.FromSeconds(15)
                }
            };

            var proxyHttpClientManager = new ProxyHttpClientManager(proxyHttpClients);

            if (useProxy)
            {
                _ = proxyHttpClientManager.StartValidateAllProxiesAsync();
            }

            var record = GetRecord(configSettings.Name);

            Directory.CreateDirectory(Path.Combine(quickBulletSettings.OutputDirectory, configSettings.Name));

            var skip = _skip == -1 ? record.Progress : _skip;

            var checkerStats = new CheckerStats(skip)
            {
                DegreeOfParallelism = _bots
            };

            var statusesToBreak   = new string[] { "toCheck", "failure", "retry", "ban", "error" };
            var statusesToRecheck = new string[] { "retry", "ban", "error" };

            var readerWriterLock = new ReaderWriterLock();

            var handler = new HttpClientHandler()
            {
                UseCookies = false
            };

            var httpClient = new HttpClient(handler)
            {
                Timeout = TimeSpan.FromSeconds(15)
            };

            var playwright = await Playwright.CreateAsync();

            Func <BotInput, CancellationToken, Task <bool> > check = new(async(input, cancellationToken) =>
            {
                BotData botData = null;

                for (var attempts = 0; attempts < 8; attempts++)
                {
                    var proxyHttpClient = proxyHttpClientManager.GetRandomProxyHttpClient();

                    botData = new BotData(quickBulletSettings, input, httpClient, proxyHttpClient, playwright)
                    {
                        UseProxy = useProxy
                    };

                    botData.Variables.Add("data.proxy", proxyHttpClient.Proxy is null ? string.Empty : proxyHttpClient.Proxy.ToString());

                    foreach (var customInput in configSettings.CustomInputs)
                    {
                        botData.Variables.Add(customInput.Name, customInput.Value);
                    }

                    foreach (var block in blocks)
                    {
                        try
                        {
                            await block.RunAsync(botData);
                        }
                        catch (HttpRequestException)
                        {
                            proxyHttpClient.IsValid = false;
                            botData.Variables["botStatus"] = "retry";
                        }
                        catch (Exception error)
                        {
                            if (error.Message.Contains("HttpClient.Timeout") || error.Message.Contains("ERR_TIMED_OUT"))
                            {
                                proxyHttpClient.IsValid = false;
                            }
                            else if (_verbose)
                            {
                                AnsiConsole.WriteException(error);
                            }
                            botData.Variables["botStatus"] = "retry";
                        }

                        if (statusesToBreak.Contains(botData.Variables["botStatus"], StringComparer.OrdinalIgnoreCase))
                        {
                            break;
                        }
                    }

                    await botData.DisposeAsync();

                    if (statusesToRecheck.Contains(botData.Variables["botStatus"], StringComparer.OrdinalIgnoreCase))
                    {
                        if (botData.Variables["botStatus"].Equals("ban", StringComparison.OrdinalIgnoreCase))
                        {
                            proxyHttpClient.IsValid = false;
                        }
                        checkerStats.Increment(botData.Variables["botStatus"]);
                    }
                    else
                    {
                        break;
                    }
                }

                var botStatus = statusesToRecheck.Contains(botData.Variables["botStatus"], StringComparer.OrdinalIgnoreCase) ? "tocheck" : botData.Variables["botStatus"].ToLower();

                if (botStatus.Equals("failure"))
                {
                    checkerStats.Increment(botData.Variables["botStatus"]);
                }
                else
                {
                    var outputPath = Path.Combine(quickBulletSettings.OutputDirectory, configSettings.Name, $"{botStatus}.txt");
                    var output = botData.Captures.Any() ? new StringBuilder().Append(botData.Input.ToString()).Append(quickBulletSettings.OutputSeparator).AppendJoin(quickBulletSettings.OutputSeparator, botData.Captures.Select(c => $"{c.Key} = {c.Value}")).ToString() : botData.Input.ToString();

                    try
                    {
                        readerWriterLock.AcquireWriterLock(int.MaxValue);
                        using var streamWriter = File.AppendText(outputPath);
                        await streamWriter.WriteLineAsync(output);
                    }
                    finally
                    {
                        readerWriterLock.ReleaseWriterLock();
                    }

                    switch (botStatus)
                    {
                    case "success":
                        AnsiConsole.MarkupLine($"[green4]SUCCESS:[/] {output}");
                        break;

                    case "tocheck":
                        AnsiConsole.MarkupLine($"[cyan3]TOCHECK:[/] {output}");
                        break;

                    default:
                        AnsiConsole.MarkupLine($"[orange3]{botStatus.ToUpper()}:[/] {output}");
                        break;
                    }

                    checkerStats.Increment(botStatus);
                }

                checkerStats.Increment("checked");

                return(true);
            });

            var paradllelizer = ParallelizerFactory <BotInput, bool> .Create(type : ParallelizerType.TaskBased, workItems : botInputs, workFunction : check, degreeOfParallelism : _bots, totalAmount : botInputs.Skip(skip).Count(), skip : skip);

            return(new Checker(paradllelizer, checkerStats, record));
        }
Example #11
0
        public async Task <BrowserType> NewContextAsync(Playwright pl)
        {
            var chrome = pl.Chromium;

            return((BrowserType)(IBrowserContext)chrome);
        }