How to use Stream class of Microsoft.Playwright.Core package

Best Playwright-dotnet code snippet using Microsoft.Playwright.Core.Stream

BotCore.cs

Source:BotCore.cs Github

copy

Full Screen

...14{15    private static readonly ConcurrentQueue<IBrowser> Browsers = new();16    private static readonly Random _random = new();17    public static string ZipDirectory = string.Empty;18    public static string StreamUrl = string.Empty;19    public static bool Headless;20    public static int BrowserLimit;21    private readonly JsonSerializerSettings _isoDateFormatSettings = new()22    {23        DateFormatHandling = DateFormatHandling.MicrosoftDateFormat,24        DateParseHandling = DateParseHandling.DateTime25    };26    private readonly object _lockObject = new();27    private readonly string _loginCookiesPath =28        Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Data", "loginCookies.json");29    private readonly ConcurrentBag<string> _chatMessages = new();30    private StreamReader _file;31    private bool _firstPage = true;32    private List<Process> _initialChromeProcesses = new();33    private IPlaywright _playwright;34    private int _refreshInterval;35    private bool _useLowCpuRam;36    public Action AllBrowsersTerminated;37    public bool CanRun = true;38    public Action DecreaseViewer;39    public Action DidItsJob;40    public Action IncreaseViewer;41    public Action<Exception> InitializationError;42    public Action<string> LiveViewer;43    public Action<Exception> LogMessage;44    public string PreferredQuality;45    public void Start(ExecuteNeedsDto executeNeeds)46    {47        if (executeNeeds.UseLowCpuRam)48            executeNeeds.RefreshInterval = 1;49        if (_playwright != null)50            _playwright.Dispose();51        _playwright = Playwright.CreateAsync().GetAwaiter().GetResult();52        BrowserLimit = executeNeeds.BrowserLimit;53        CanRun = true;54        _firstPage = true;55        _useLowCpuRam = executeNeeds.UseLowCpuRam;56        Headless = executeNeeds.Headless;57        PreferredQuality = executeNeeds.PreferredQuality;58        _refreshInterval = executeNeeds.RefreshInterval;59        var i = 0;60        StreamUrl = executeNeeds.Stream;61        62        var executeNeedsChatMessages = executeNeeds.ChatMessages;63        Shuffle(ref executeNeedsChatMessages);64        foreach (var item in executeNeedsChatMessages) _chatMessages.Add(item);65        if (BrowserLimit > 0)66        {67            var thr = new Thread(LoopWithLimit);68            thr.Start();69        }70        71        _initialChromeProcesses = Process.GetProcessesByName("chrome").ToList();72        do73        {74            try75            {76                _file = new StreamReader(executeNeeds.ProxyListDirectory);77                string line;78                while (CanRun && (line = _file.ReadLine()) != null)79                {80                    line = line.Replace(" ", "");81                    if (string.IsNullOrEmpty(line))82                        continue;83                    var array = line.Split(':');84                    var proxy = new Proxy85                    {86                        Server = "http://" + array[0] + ":" + array[1],87                        Username = array[2],88                        Password = array[3]89                    };90                    var thr = new Thread(Request) {Priority = ThreadPriority.AboveNormal};91                    var r = new Random();92                    var rInt = r.Next(5000, 8000);93                    while (BrowserLimit > 0 && Browsers.Count >= BrowserLimit) Thread.Sleep(1000);94                    if (!CanRun)95                        continue;96                    executeNeeds.LoginInfos.TryDequeue(out var loginInfo);97                    thr.Start(new SessionConfigurationDto98                    {99                        Url = line,100                        Count = i,101                        PreferredQuality = executeNeeds.PreferredQuality,102                        LoginInfo = loginInfo,103                        Service = executeNeeds.Service,104                        Proxy = proxy105                    });106                    i++;107                    Thread.Sleep(BrowserLimit == 0 ? rInt : 1000);108                }109                _file.Close();110            }111            catch (Exception e)112            {113                InitializationError?.Invoke(e is IndexOutOfRangeException114                    ? new Exception("Please select a valid proxy file.")115                    : e);116            }117            if (!CanRun)118                break;119        } while (executeNeeds.BrowserLimit > 0);120        DidItsJob?.Invoke();121    }122    private void Shuffle(ref List<string> list)123    {124        var n = list.Count;125        while (n > 1)126        {127            n--;128            var k = _random.Next(n + 1);129            (list[k], list[n]) = (list[n], list[k]);130        }131    }132    private void StoreCookie(Tuple<string, List<BrowserContextCookiesResult>> cookie)133    {134        var myCookie = new List<MyCookie>();135        foreach (var item in cookie.Item2)136            myCookie.Add(new MyCookie137            {138                Domain = item.Domain,139                Expiry = item.Expires,140                HttpOnly = Convert.ToBoolean(item.HttpOnly),141                Name = item.Name,142                Path = item.Path,143                Value = item.Value,144                Secure = Convert.ToBoolean(item.Secure)145            });146        lock (_lockObject)147        {148            if (!File.Exists(_loginCookiesPath))149            {150                var item = new Dictionary<string, List<MyCookie>> {{cookie.Item1, myCookie}};151                File.WriteAllText(_loginCookiesPath, JsonConvert.SerializeObject(item), Encoding.UTF8);152                return;153            }154            var readCookiesJson = File.ReadAllText(_loginCookiesPath);155            var readCookies = JsonConvert.DeserializeObject<Dictionary<string, List<MyCookie>>>(readCookiesJson);156            readCookies.TryGetValue(cookie.Item1, out var value);157            if (value?.Count > 0)158                readCookies[cookie.Item1] = myCookie;159            else160                readCookies.Add(cookie.Item1, myCookie);161            File.WriteAllText(_loginCookiesPath, JsonConvert.SerializeObject(readCookies), Encoding.UTF8);162        }163    }164    private List<MyCookie> GetCookie(string username)165    {166        lock (_lockObject)167        {168            if (!File.Exists(_loginCookiesPath)) return new List<MyCookie>();169            var readCookiesJson = File.ReadAllText(_loginCookiesPath);170            var readCookies = JsonConvert.DeserializeObject<Dictionary<string, List<MyCookie>>>(readCookiesJson);171            return readCookies.FirstOrDefault(x => x.Key == username).Value;172        }173    }174    private void KillAllProcesses()175    {176        var allChromeProcesses = Process.GetProcessesByName("chrome");177        foreach (var process in allChromeProcesses)178            if (_initialChromeProcesses.All(x => x.Id != process.Id))179            {180                var startInfo = new ProcessStartInfo181                {182                    CreateNoWindow = true,183                    FileName = "CMD.exe"184                };185                var strCmd = $"/C taskkill /F /PID {process.Id}";186                startInfo.Arguments = strCmd;187                var processTemp = new Process();188                processTemp.StartInfo = startInfo;189                processTemp.Start();190            }191        _initialChromeProcesses.Clear();192        var allChromeDriverProcesses = Process.GetProcessesByName("chromedriver");193        foreach (var chromeDriverService in allChromeDriverProcesses)194            try195            {196                chromeDriverService.Kill();197            }198            catch (Exception)199            {200                //ignored201            }202    }203    public void Stop()204    {205        CanRun = false;206        _file?.Close();207        KillAllProcesses();208        209        Browsers.Clear();210        AllBrowsersTerminated?.Invoke();211    }212    private void LoopWithLimit()213    {214        while (CanRun)215            try216            {217                if (Browsers.Count >= BrowserLimit)218                {219                    KillAllProcesses();220                    Browsers.Clear();221                }222                Thread.Sleep(500);223            }224            catch (Exception)225            {226                //ignored227            }228    }229    private void Request(object obj)230    {231        try232        {233            var r = new Random();234            var itm = (SessionConfigurationDto) obj;235            var array = itm.Url.Split(':');236            var args = new List<string>();237            string[] resolutions =238                {"1480,900", "1550,790", "1600,900", "1920,1080", "1480,768", "1780,940"};239            var browserLaunchOptions = new BrowserTypeLaunchOptions()240            {241                Headless = false,242                Channel = "chrome",243                Timeout = 120000,244                Proxy = itm.Proxy245            };246            if (_useLowCpuRam)247            {248                args.Add("--disable-extensions-except=" + AppDomain.CurrentDomain.BaseDirectory +249                         "\\Extensions\\TwitchAlternative.crx");250                args.Add("--load-extension=" + AppDomain.CurrentDomain.BaseDirectory +251                         "\\Extensions\\TwitchAlternative.crx");252            }253            if (Headless) browserLaunchOptions.Headless = true;254            var localChrome = AppDomain.CurrentDomain.BaseDirectory + "\\Extensions\\LocalChrome\\chrome.exe";255            if (File.Exists(localChrome)) browserLaunchOptions.ExecutablePath = localChrome;256            args.Add("--mute-audio");257            args.Add("--enable-automation");258            args.Add("--useAutomationExtension=false");259            browserLaunchOptions.Args = args;260            var browser = _playwright.Chromium.LaunchAsync(browserLaunchOptions).GetAwaiter().GetResult();261            var page = browser.NewPageAsync(new BrowserNewPageOptions()262            {263                ViewportSize = new ViewportSize264                {265                    Width = Convert.ToInt32(resolutions[r.Next(0, resolutions.Length - 1)].Split(',')[0]),266                    Height = Convert.ToInt32(resolutions[r.Next(0, resolutions.Length - 1)].Split(',')[1])267                },268                UserAgent =269                    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36",270                Geolocation = new Geolocation() {Latitude = r.Next(-90, 90), Longitude = r.Next(-180, 180)},271            }).GetAwaiter().GetResult();272            page.GotoAsync(StreamUrl, new PageGotoOptions() {Timeout = 120000, WaitUntil = WaitUntilState.Load})273                .GetAwaiter().GetResult();274            if (BrowserLimit > 0)275            {276                Thread.Sleep(1000);277                return;278            }279            Browsers.Enqueue(browser);280            IncreaseViewer?.Invoke();281            var firstPage = false;282            var startDate = DateTime.Now;283            var messageStartDate = DateTime.Now;284            var messageInterval = _random.Next(1, 10);285            if (itm.Service == StreamService.Service.Twitch)286            {287                if (!Headless && !_useLowCpuRam)288                    try289                    {290                        page.EvaluateAsync("window.localStorage.setItem('video-quality', '" + itm.PreferredQuality +291                                           "');");292                        page.ReloadAsync().GetAwaiter().GetResult();293                    }294                    catch (Exception)295                    {296                        //ignored297                    }298                var matureClicked = false;299                var matureCheckCount = 0;300                var cacheClicked = false;301                var cacheCheckCount = 0;302                if (itm.LoginInfo != null)303                {304                    Thread.Sleep(1000);305                    var allCookies = GetCookie(itm.LoginInfo.Username);306                    if (allCookies != null)307                        foreach (var cookie in allCookies)308                        {309                            Cookie[] cookies =310                            {311                                new()312                                {313                                    Domain = cookie.Domain, Expires = cookie.Expiry, Name = cookie.Name,314                                    Path = cookie.Path, Secure = cookie.Secure, Url = cookie.Path,315                                    HttpOnly = cookie.HttpOnly, Value = cookie.Value316                                }317                            };318                            page.Context.AddCookiesAsync(cookies);319                        }320                    try321                    {322                        var loginButton =323                            page.Locator(324                                "xpath=/html/body/div[1]/div/div[2]/nav/div/div[3]/div[3]/div/div[1]/div[1]/button/div/div");325                        if (loginButton.CountAsync().GetAwaiter().GetResult() > 0)326                        {327                            Click(ref loginButton);328                            Thread.Sleep(1000);329                            var usernameBox =330                                page.Locator(331                                    "xpath=/html/body/div[3]/div/div/div/div/div/div[1]/div/div/div[3]/form/div/div[1]/div/div[2]/input");332                            if (usernameBox.CountAsync().GetAwaiter().GetResult() > 0)333                            {334                                Click(ref usernameBox);335                                Thread.Sleep(1000);336                                usernameBox.TypeAsync(itm.LoginInfo.Username).GetAwaiter().GetResult();337                                var passwordBox =338                                    page.Locator(339                                        "xpath=/html/body/div[3]/div/div/div/div/div/div[1]/div/div/div[3]/form/div/div[2]/div/div[1]/div[2]/div[1]/input");340                                if (passwordBox.CountAsync().GetAwaiter().GetResult() > 0)341                                {342                                    Click(ref passwordBox);343                                    Thread.Sleep(1000);344                                    passwordBox.TypeAsync(itm.LoginInfo.Password).GetAwaiter().GetResult();345                                    Thread.Sleep(1000);346                                    var login = page.Locator(347                                        "xpath=/html/body/div[3]/div/div/div/div/div/div[1]/div/div/div[3]/form/div/div[3]/button/div/div");348                                    Thread.Sleep(1000);349                                    if (login.CountAsync().GetAwaiter().GetResult() > 0)350                                        Click(ref login);351                                }352                            }353                        }354                    }355                    catch (Exception ex)356                    {357                        LogMessage?.Invoke(new Exception($"Login failed: {ex.Message}"));358                    }359                    while (true)360                    {361                        Thread.Sleep(1000);362                        var cookie = page.Context.CookiesAsync().GetAwaiter().GetResult()363                            .Any(x => x.Name == "auth-token");364                        if (cookie)365                        {366                            StoreCookie(new Tuple<string, List<BrowserContextCookiesResult>>(itm.LoginInfo.Username,367                                new List<BrowserContextCookiesResult>(page.Context.CookiesAsync().GetAwaiter()368                                    .GetResult().ToArray())));369                            break;370                        }371                    }372                }373                while (true)374                {375                    try376                    {377                        if (_firstPage)378                        {379                            firstPage = true;380                            _firstPage = false;381                        }382                        if (firstPage)383                        {384                            var liveViewers =385                                page.Locator(386                                    "xpath=/html/body/div[1]/div/div[2]/div[1]/main/div[2]/div[3]/div/div/div[1]/div[1]/div[2]/div/div[1]/div/div/div/div[2]/div[2]/div[2]/div/div/div[1]/div[1]/div/p/span");387                            if (liveViewers.CountAsync().GetAwaiter().GetResult() > 0)388                            {389                                LiveViewer.Invoke(liveViewers.InnerTextAsync().GetAwaiter().GetResult());390                                Thread.Sleep(5000);391                            }392                        }393                    }394                    catch (Exception)395                    {396                        LiveViewer.Invoke("N/A");397                    }398                    Thread.Sleep(1000);399                    try400                    {401                        var connectionError =402                            page.Locator(403                                "xpath=/html/body/div[1]/div/div[2]/div[1]/main/div[2]/div[3]/div/div/div[2]/div/div[2]/div/div/div/div/div[7]/div/div[3]/button/div/div[2]");404                        if (connectionError.CountAsync().GetAwaiter().GetResult() > 0)405                            connectionError.ClickAsync().GetAwaiter().GetResult();406                    }407                    catch (Exception)408                    {409                        //ignored410                    }411                    412                    try413                    {414                        if (!matureClicked && matureCheckCount < 5)415                            try416                            {417                                var mature =418                                    page.Locator(419                                        "xpath=/html/body/div[1]/div/div[2]/div[1]/main/div[2]/div[3]/div/div/div[2]/div/div[2]/div/div/div/div/div[5]/div/div[3]/button/div/div");420                                if (mature.CountAsync().GetAwaiter().GetResult() > 0)421                                {422                                    Click(ref mature);423                                    matureClicked = true;424                                    matureCheckCount++;425                                }426                            }427                            catch428                            {429                                //ignored because there is no mature button430                            }431                    }432                    catch (Exception)433                    {434                        // ignored435                    }436                    try437                    {438                        if (!cacheClicked && cacheCheckCount < 5)439                            try440                            {441                                var cache = page.Locator(442                                    "xpath=/html/body/div[1]/div/div[2]/div[1]/div/div/div[3]/button/div/div/div");443                                if (cache.CountAsync().GetAwaiter().GetResult() > 0)444                                {445                                    Click(ref cache);446                                    cacheClicked = true;447                                }448                                cacheCheckCount++;449                            }450                            catch (Exception)451                            {452                                //ignored because there is no cache button453                            }454                    }455                    catch (Exception)456                    {457                        // ignored458                    }459                    try460                    {461                        if (_refreshInterval != 0 &&462                            DateTime.Now - startDate > TimeSpan.FromMinutes(_refreshInterval))463                        {464                            page.ReloadAsync().GetAwaiter().GetResult();465                            startDate = DateTime.Now;466                        }467                    }468                    catch (Exception)469                    {470                        //ignored471                    }472                    try473                    {474                        if (messageInterval != 0 &&475                            DateTime.Now - messageStartDate > TimeSpan.FromMinutes(messageInterval) &&476                            itm.LoginInfo != null)477                        {478                            SendMessage();479                            messageStartDate = DateTime.Now;480                        }481                    }482                    catch (Exception)483                    {484                        //ignored485                    }486                }487                void SendMessage()488                {489                    try490                    {491                        var chatBox = page.WaitForSelectorAsync(".chat-wysiwyg-input__editor").GetAwaiter()492                            .GetResult();493                        if (_chatMessages.TryTake(out var message))494                        {495                            chatBox?.TypeAsync(message).GetAwaiter().GetResult();496                            page.Keyboard.PressAsync("Enter").GetAwaiter().GetResult();497                        }498                    }499                    catch (Exception)500                    {501                        //ignored  502                    }503                }504            }505            if (itm.Service == StreamService.Service.Youtube)506            {507                Thread.Sleep(3000);508                try509                {510                    var play = page.Locator(511                        "xpath=/html/body/ytd-app/div/ytd-page-manager/ytd-watch-flexy/div[5]/div[1]/div/div[1]/div/div/div/ytd-player/div/div/div[5]/button");512                    play?.ClickAsync().GetAwaiter().GetResult();513                }514                catch (Exception)515                {516                    //ignored517                }518                while (true)519                {520                    try521                    {522                        if (_firstPage)523                        {524                            firstPage = true;525                            _firstPage = false;526                        }527                        if (firstPage)528                        {529                            var liveViewers = page.Locator(530                                "xpath=/html/body/ytd-app/div/ytd-page-manager/ytd-watch-flexy/div[5]/div[1]/div/div[6]/div[2]/ytd-video-primary-info-renderer/div/div/div[1]/div[1]/ytd-video-view-count-renderer/span[1]");531                            if (liveViewers.CountAsync().GetAwaiter().GetResult() > 0)532                            {533                                LiveViewer.Invoke(534                                    liveViewers.InnerTextAsync().GetAwaiter().GetResult().Split(' ')[0]);535                                Thread.Sleep(5000);536                            }537                        }538                    }539                    catch (Exception)540                    {541                        LiveViewer.Invoke("N/A");542                    }543                    try544                    {545                        if (_refreshInterval != 0 &&546                            DateTime.Now - startDate > TimeSpan.FromMinutes(_refreshInterval))547                        {548                            page.ReloadAsync().GetAwaiter().GetResult();549                            startDate = DateTime.Now;550                        }551                    }552                    catch553                    {554                        //ignored555                    }556                }557            }558            if (itm.Service == StreamService.Service.DLive)559            {560                Thread.Sleep(3000);561                var isPlaying = false;562                while (true)563                {564                    try565                    {566                        if (_firstPage)567                        {568                            firstPage = true;569                            _firstPage = false;570                        }571                        if (firstPage)572                        {573                            try574                            {575                                var liveViewers =576                                    page.Locator(577                                        "xpath=/html/body/div/div[1]/div[20]/div[2]/div/div[2]/div/div/div/div[1]/div/div[1]/div[3]/div/div[1]/div/div[2]/div[2]");578                                if (liveViewers.CountAsync().GetAwaiter().GetResult() > 0)579                                {580                                    LiveViewer.Invoke(liveViewers.InnerTextAsync().GetAwaiter().GetResult()581                                        .Split(" ")[0]);582                                    Thread.Sleep(5000);583                                }584                            }585                            catch (Exception)586                            {587                                //ignored588                            }589                            try590                            {591                                var liveViewers =592                                    page.Locator(593                                        "xpath=/html/body/div/div[1]/div[18]/div[2]/div/div/div/div/div/div/div/div/div[3]/div/div[3]/div/div/div[1]/div/div[1]/div[2]/div/div[1]/span");594                                if (liveViewers.CountAsync().GetAwaiter().GetResult() > 0)595                                {596                                    LiveViewer.Invoke(liveViewers.InnerTextAsync().GetAwaiter().GetResult());597                                    Thread.Sleep(5000);598                                }599                            }600                            catch (Exception)601                            {602                                //ignored603                            }604                        }605                        if (!isPlaying)606                        {607                            var play = page.Locator(608                                "xpath=/html/body/div/div[1]/div[14]/div[2]/div/div[2]/div/div/div/div/div/div/div[1]/div/div/div/div/div[4]/div[2]/button/svg");609                            if (play.CountAsync().GetAwaiter().GetResult() > 0)610                            {611                                Click(ref play);612                                isPlaying = true;613                            }614                        }615                        Thread.Sleep(1000);616                    }617                    catch (Exception)618                    {619                        //ignored620                    }621                    try622                    {623                        if (_refreshInterval != 0 &&624                            DateTime.Now - startDate > TimeSpan.FromMinutes(_refreshInterval))625                        {626                            page.ReloadAsync().GetAwaiter().GetResult();627                            isPlaying = false;628                            startDate = DateTime.Now;629                        }630                    }631                    catch (Exception)632                    {633                        //ignored634                    }635                }636            }637            if (itm.Service == StreamService.Service.NimoTv)638            {639                Thread.Sleep(3000);640                var isPlaying = false;641                if (itm.LoginInfo != null)642                {643                    Thread.Sleep(1000);644                    var allCookies = GetCookie(itm.LoginInfo.Username);645                    if (allCookies != null)646                        foreach (var cookie in allCookies)647                        {648                            Cookie[] cookies =649                            {650                                new()651                                {652                                    Domain = cookie.Domain, Expires = cookie.Expiry, Name = cookie.Name,653                                    Path = cookie.Path, Secure = cookie.Secure, Url = cookie.Path,654                                    HttpOnly = cookie.HttpOnly, Value = cookie.Value655                                }656                            };657                            page.Context.AddCookiesAsync(cookies);658                        }659                    try660                    {661                        var loginButton =662                            page.Locator("xpath=/html/body/div[2]/div[1]/div/div[2]/div/div[2]/button");663                        if (loginButton.CountAsync().GetAwaiter().GetResult() > 0)664                        {665                            Click(ref loginButton);666                            Thread.Sleep(1000);667                            var usernameBox =668                                page.Locator(669                                    "xpath=/html/body/div[6]/div/div[2]/div/div[2]/div/div/div[3]/div[1]/div[2]/input");670                            if (usernameBox.CountAsync().GetAwaiter().GetResult() > 0)671                            {672                                Click(ref usernameBox);673                                Thread.Sleep(1000);674                                usernameBox.TypeAsync(itm.LoginInfo.Username.Split('/')[1]).GetAwaiter()675                                    .GetResult();676                                var countryCodeArrow =677                                    page.Locator(678                                        "xpath=/html/body/div[6]/div/div[2]/div/div[2]/div/div/div[3]/div[1]/div[2]/div[1]");679                                if (countryCodeArrow.CountAsync().GetAwaiter().GetResult() > 0)680                                {681                                    Click(ref countryCodeArrow);682                                    Thread.Sleep(1000);683                                    var searchCountryCode =684                                        page.Locator(685                                            "xpath=/html/body/div[6]/div/div[2]/div/div[4]/div/div/div/div[1]/input");686                                    if (searchCountryCode.CountAsync().GetAwaiter().GetResult() > 0)687                                    {688                                        searchCountryCode.TypeAsync(itm.LoginInfo.Username.Split('/')[0]689                                            .Replace("+", string.Empty)).GetAwaiter().GetResult();690                                        Thread.Sleep(1000);691                                        var firstElement =692                                            page.Locator(693                                                "xpath=/html/body/div[6]/div/div[2]/div/div[4]/div/div/div/div[2]/div[1]/div[2]");694                                        if (firstElement.CountAsync().GetAwaiter().GetResult() > 0)695                                            Click(ref firstElement);696                                    }697                                }698                                var passwordBox =699                                    page.Locator(700                                        "xpath=/html/body/div[6]/div/div[2]/div/div[2]/div/div/div[3]/div[1]/div[3]/input");701                                if (passwordBox.CountAsync().GetAwaiter().GetResult() > 0)702                                {703                                    Click(ref passwordBox);704                                    Thread.Sleep(1000);705                                    passwordBox.TypeAsync(itm.LoginInfo.Password).GetAwaiter().GetResult();706                                    Thread.Sleep(1000);707                                    var login = page.Locator(708                                        "xpath=/html/body/div[6]/div/div[2]/div/div[2]/div/div/div[3]/div[1]/button");709                                    Thread.Sleep(1000);710                                    if (login.CountAsync().GetAwaiter().GetResult() > 0)711                                        Click(ref login);712                                }713                            }714                        }715                    }716                    catch (Exception ex)717                    {718                        LogMessage?.Invoke(new Exception($"Login failed: {ex.Message}"));719                    }720                    while (true)721                    {722                        Thread.Sleep(1000);723                        var cookie = page.Context.CookiesAsync().GetAwaiter().GetResult()724                            .Any(x => x.Name == "userName");725                        if (cookie)726                        {727                            StoreCookie(new Tuple<string, List<BrowserContextCookiesResult>>(itm.LoginInfo.Username,728                                new List<BrowserContextCookiesResult>(page.Context.CookiesAsync().GetAwaiter()729                                    .GetResult().ToArray())));730                            break;731                        }732                    }733                }734                while (true)735                {736                    try737                    {738                        if (_firstPage)739                        {740                            firstPage = true;741                            _firstPage = false;742                        }743                        if (firstPage)744                        {745                            var liveViewers =746                                page.Locator(747                                    "xpath=/html/body/div[2]/div[2]/div[2]/div[1]/div/div/div[2]/div[2]/div[1]/div[1]/div/div[2]/div[3]/span");748                            if (liveViewers.CountAsync().GetAwaiter().GetResult() > 0)749                            {750                                LiveViewer.Invoke(liveViewers.InnerTextAsync().GetAwaiter().GetResult());751                                Thread.Sleep(5000);752                            }753                        }754                    }755                    catch (Exception)756                    {757                        LiveViewer.Invoke("N/A");758                    }759                    try760                    {761                        if (!isPlaying)762                        {763                            var play = page.Locator(764                                "xpath=/html/body/div[2]/div[2]/div[2]/div[1]/div/div/div[2]/div[2]/div[1]/div[2]/div[1]/div[2]/div/span");765                            if (play.CountAsync().GetAwaiter().GetResult() > 0)766                            {767                                Click(ref play);768                                isPlaying = true;769                            }770                        }771                    }772                    catch (Exception)773                    {774                        //ignored775                    }776                    try777                    {778                        if (_refreshInterval != 0 &&779                            DateTime.Now - startDate > TimeSpan.FromMinutes(_refreshInterval))780                        {781                            page.ReloadAsync().GetAwaiter().GetResult();782                            isPlaying = false;783                            startDate = DateTime.Now;784                        }785                    }786                    catch (Exception)787                    {788                        //ignored789                    }790                    try791                    {792                        if (messageInterval != 0 &&793                            DateTime.Now - messageStartDate > TimeSpan.FromMinutes(messageInterval) &&794                            itm.LoginInfo != null)795                        {796                            SendMessage();797                            messageStartDate = DateTime.Now;798                        }799                    }800                    catch (Exception)801                    {802                        //ignored803                    }804                    void SendMessage()805                    {806                        try807                        {808                            var chatBox = page.WaitForSelectorAsync(".nimo-room__chatroom__chat-box__input")809                                .GetAwaiter().GetResult();810                            if (chatBox != null && _chatMessages.TryTake(out var message))811                            {812                                chatBox.TypeAsync(message).GetAwaiter().GetResult();813                                page.Keyboard.PressAsync("Enter");814                            }815                        }816                        catch (Exception)817                        {818                            //ignored  819                        }820                    }821                    Thread.Sleep(1000);822                }823            }824            if (itm.Service == StreamService.Service.Twitter)825            {826                Thread.Sleep(3000);827                while (true)828                {829                    try830                    {831                        if (_firstPage)832                        {833                            firstPage = true;834                            _firstPage = false;835                        }836                        if (firstPage)837                        {838                            var liveViewers =839                                page.Locator(840                                    "xpath=/html/body/div[2]/div[2]/div[2]/div[1]/div/div/div[2]/div[2]/div[1]/div[1]/div/div[2]/div[3]/span");841                            if (liveViewers.CountAsync().GetAwaiter().GetResult() > 0)842                            {843                                LiveViewer.Invoke(liveViewers.InnerTextAsync().GetAwaiter().GetResult());844                                Thread.Sleep(5000);845                            }846                        }847                    }848                    catch (Exception)849                    {850                        LiveViewer.Invoke("N/A");851                    }852                    try853                    {854                        if (_refreshInterval != 0 &&855                            DateTime.Now - startDate > TimeSpan.FromMinutes(_refreshInterval))856                        {857                            page.ReloadAsync().GetAwaiter().GetResult();858                            startDate = DateTime.Now;859                        }860                    }861                    catch (Exception)862                    {863                        //ignored864                    }865                    Thread.Sleep(1000);866                }867            }868            if (itm.Service == StreamService.Service.Facebook)869            {870                Thread.Sleep(3000);871                if (itm.LoginInfo != null)872                {873                    Thread.Sleep(1000);874                    var allCookies = GetCookie(itm.LoginInfo.Username);875                    if (allCookies != null)876                        foreach (var cookie in allCookies)877                        {878                            Cookie[] cookies =879                            {880                                new()881                                {882                                    Domain = cookie.Domain, Expires = cookie.Expiry, Name = cookie.Name,883                                    Path = cookie.Path, Secure = cookie.Secure, Url = cookie.Path,884                                    HttpOnly = cookie.HttpOnly, Value = cookie.Value885                                }886                            };887                            page.Context.AddCookiesAsync(cookies);888                        }889                    try890                    {891                        var usernameBox =892                            page.Locator(893                                "xpath=/html/body/div[1]/div/div[1]/div/div[2]/div[2]/div[2]/div/form/div[2]/div[1]/label/input");894                        if (usernameBox.CountAsync().GetAwaiter().GetResult() > 0)895                        {896                            Click(ref usernameBox);897                            Thread.Sleep(1000);898                            usernameBox.TypeAsync(itm.LoginInfo.Username).GetAwaiter().GetResult();899                            var passwordBox =900                                page.Locator(901                                    "xpath=/html/body/div[1]/div/div[1]/div/div[2]/div[2]/div[2]/div/form/div[2]/div[2]/label/input");902                            if (passwordBox.CountAsync().GetAwaiter().GetResult() > 0)903                            {904                                Click(ref passwordBox);905                                Thread.Sleep(1000);906                                passwordBox.TypeAsync(itm.LoginInfo.Password).GetAwaiter().GetResult();907                                Thread.Sleep(1000);908                                var login = page.Locator(909                                    "xpath=/html/body/div[1]/div/div[1]/div/div[2]/div[2]/div[2]/div/form/div[2]/div[3]/div/div/div[1]/div/span/span");910                                Thread.Sleep(1000);911                                if (login.CountAsync().GetAwaiter().GetResult() > 0)912                                    Click(ref login);913                            }914                        }915                    }916                    catch (Exception ex)917                    {918                        LogMessage?.Invoke(new Exception($"Login failed: {ex.Message}"));919                    }920                    Thread.Sleep(3000);921                    page.ReloadAsync().GetAwaiter().GetResult();922                    while (true)923                    {924                        Thread.Sleep(1000);925                        var cookie = page.Context.CookiesAsync().GetAwaiter().GetResult()926                            .Any(x => x.Name == "c_user");927                        if (cookie)928                        {929                            StoreCookie(new Tuple<string, List<BrowserContextCookiesResult>>(itm.LoginInfo.Username,930                                new List<BrowserContextCookiesResult>(page.Context.CookiesAsync().GetAwaiter()931                                    .GetResult().ToArray())));932                            break;933                        }934                    }935                }936                while (true)937                {938                    try939                    {940                        if (_firstPage)941                        {942                            firstPage = true;943                            _firstPage = false;944                        }945                        if (firstPage)946                        {947                            var liveViewers =948                                page.Locator(949                                    "xpath=/html/body/div[1]/div/div[1]/div/div[3]/div/div/div[1]/div[2]/div[1]/div/div/div/div[1]/div[1]/div/div/div/div[2]/div/div[5]/div[2]/span[2]");950                            if (liveViewers.CountAsync().GetAwaiter().GetResult() > 0)951                            {952                                LiveViewer.Invoke(liveViewers.InnerTextAsync().GetAwaiter().GetResult());953                                Thread.Sleep(5000);954                            }955                        }956                    }957                    catch (Exception)958                    {959                        //ignored960                    }961                    try962                    {963                        if (_refreshInterval != 0 &&964                            DateTime.Now - startDate > TimeSpan.FromMinutes(_refreshInterval))965                        {966                            page.ReloadAsync().GetAwaiter().GetResult();967                            startDate = DateTime.Now;968                        }969                    }970                    catch (Exception)971                    {972                        //ignored973                    }974                }975            }976            if (itm.Service == StreamService.Service.TrovoLive)977            {978                Thread.Sleep(5000);979                if (!Headless && !_useLowCpuRam)980                    try981                    {982                        page.EvaluateAsync("window.localStorage.setItem('live/userClarityLevel', '" +983                                           itm.PreferredQuality + "');");984                        page.ReloadAsync().GetAwaiter().GetResult();985                    }986                    catch (Exception)987                    {988                        //ignored989                    }990                if (itm.LoginInfo != null)991                {992                    Thread.Sleep(1000);993                    var allCookies = GetCookie(itm.LoginInfo.Username);994                    if (allCookies != null)995                        foreach (var cookie in allCookies)996                        {997                            Cookie[] cookies =998                            {999                                new()1000                                {1001                                    Domain = cookie.Domain, Expires = cookie.Expiry, Name = cookie.Name,1002                                    Path = cookie.Path, Secure = cookie.Secure, Url = cookie.Path,1003                                    HttpOnly = cookie.HttpOnly, Value = cookie.Value1004                                }1005                            };1006                            page.Context.AddCookiesAsync(cookies);1007                        }1008                    try1009                    {1010                        var loginSignUpButton =1011                            page.Locator("xpath=/html/body/div[1]/div/div/nav/div[3]/div[3]/button");1012                        if (loginSignUpButton.CountAsync().GetAwaiter().GetResult() > 0)1013                        {1014                            Click(ref loginSignUpButton);1015                            Thread.Sleep(4000);1016                            ILocator usernameBox;1017                            try1018                            {1019                                usernameBox =1020                                    page.Locator(1021                                        "xpath=/html/body/div[4]/div/div[2]/div[3]/div[1]/div[1]/div/input");1022                            }1023                            catch1024                            {1025                                usernameBox =1026                                    page.Locator(1027                                        "xpath=/html/body/div[4]/div/div[2]/div[3]/div[1]/div[1]/div[1]/input");1028                            }1029                            if (usernameBox.CountAsync().GetAwaiter().GetResult() > 0)1030                            {1031                                Click(ref usernameBox);1032                                Thread.Sleep(1000);1033                                usernameBox.TypeAsync(itm.LoginInfo.Username).GetAwaiter().GetResult();1034                                Thread.Sleep(1000);1035                                var passwordBox =1036                                    page.Locator(1037                                        "xpath=/html/body/div[4]/div/div[2]/div[3]/div[1]/div[3]/div/input");1038                                if (passwordBox.CountAsync().GetAwaiter().GetResult() > 0)1039                                {1040                                    passwordBox.TypeAsync(itm.LoginInfo.Password).GetAwaiter().GetResult();1041                                    var login = page.Locator(1042                                        "xpath=/html/body/div[4]/div/div[2]/div[3]/div[1]/button");1043                                    Thread.Sleep(1000);1044                                    if (login.CountAsync().GetAwaiter().GetResult() > 0)1045                                        Click(ref login);1046                                }1047                            }1048                        }1049                    }1050                    catch (Exception ex)1051                    {1052                        LogMessage?.Invoke(new Exception($"Login failed: {ex.Message}"));1053                    }1054                    Thread.Sleep(3000);1055                    page.ReloadAsync().GetAwaiter().GetResult();1056                    while (true)1057                    {1058                        Thread.Sleep(1000);1059                        var cookie = page.Context.CookiesAsync().GetAwaiter().GetResult().Any(x => x.Name == "uid");1060                        if (cookie)1061                        {1062                            StoreCookie(new Tuple<string, List<BrowserContextCookiesResult>>(itm.LoginInfo.Username,1063                                new List<BrowserContextCookiesResult>(page.Context.CookiesAsync().GetAwaiter()1064                                    .GetResult().ToArray())));1065                            break;1066                        }1067                    }1068                }1069                var matureClicked = false;1070                var chatRulesClicked = false;1071                var matureCheckCount = 0;1072                while (true)1073                {1074                    try1075                    {1076                        if (_firstPage)1077                        {1078                            firstPage = true;1079                            _firstPage = false;1080                        }1081                        if (firstPage)1082                        {1083                            var liveViewers =1084                                page.Locator(1085                                    "xpath=/html/body/div[1]/div/div[1]/div/div[3]/div/div/div[1]/div[2]/div[1]/div/div/div/div[1]/div[1]/div/div/div/div[2]/div/div[5]/div[2]/span[2]");1086                            if (liveViewers.CountAsync().GetAwaiter().GetResult() > 0)1087                            {1088                                LiveViewer.Invoke(liveViewers.InnerTextAsync().GetAwaiter().GetResult());1089                                Thread.Sleep(5000);1090                            }1091                        }1092                    }1093                    catch (Exception)1094                    {1095                        //ignored1096                    }1097                    try1098                    {1099                        if (_refreshInterval != 0 &&1100                            DateTime.Now - startDate > TimeSpan.FromMinutes(_refreshInterval))1101                        {1102                            page.ReloadAsync().GetAwaiter().GetResult();1103                            startDate = DateTime.Now;1104                        }1105                    }1106                    catch (Exception)1107                    {1108                        //ignored1109                    }1110                    try1111                    {1112                        if (!matureClicked && matureCheckCount < 5)1113                            try1114                            {1115                                ILocator mature = null;1116                                try1117                                {1118                                    mature = page.Locator(1119                                        "xpath=/html/body/div[1]/div/div/div/div[2]/div/div/div[1]/div[1]/div[1]/div/div[4]/div[3]/section/div/button[2]");1120                                }1121                                catch1122                                {1123                                    //ignored1124                                }1125                                if (mature.CountAsync().GetAwaiter().GetResult() == 0)1126                                    mature = page.Locator(1127                                        "xpath=/html/body/div[1]/div/div/div/div[2]/div/div/div[1]/div[1]/div[1]/div/div[2]/div[3]/section/div/button[2]");1128                                if (mature.CountAsync().GetAwaiter().GetResult() > 0)1129                                {1130                                    Click(ref mature);1131                                    matureClicked = true;1132                                }1133                                matureCheckCount++;1134                            }1135                            catch1136                            {1137                                //ignored because there is no mature button1138                            }1139                    }1140                    catch (Exception)1141                    {1142                        // ignored1143                    }1144                    if (!chatRulesClicked)1145                        try1146                        {1147                            var chatRules = page.Locator(1148                                "xpath=/html/body/div[1]/div/div/div/div[2]/div/section/div[3]/div/section/section/div/button");1149                            if (chatRules.CountAsync().GetAwaiter().GetResult() > 0)1150                            {1151                                chatRules.ClickAsync().GetAwaiter().GetResult();1152                                chatRulesClicked = true;1153                            }1154                        }1155                        catch (Exception)1156                        {1157                            //ignored1158                        }1159                    try1160                    {1161                        if (messageInterval != 0 &&1162                            DateTime.Now - messageStartDate > TimeSpan.FromMinutes(messageInterval) &&1163                            itm.LoginInfo != null)1164                        {1165                            SendMessage();1166                            messageStartDate = DateTime.Now;1167                        }1168                    }1169                    catch (Exception)1170                    {1171                        //ignored1172                    }1173                    void SendMessage()1174                    {1175                        try1176                        {1177                            var chatBox =1178                                page.Locator(1179                                    "xpath=/html/body/div[1]/div/div/div/div[2]/div/section/div[3]/div/section/div[1]/div[1]/div[1]");1180                            if (chatBox.CountAsync().GetAwaiter().GetResult() > 0 &&1181                                _chatMessages.TryTake(out var message))1182                            {1183                                chatBox.TypeAsync(message).GetAwaiter().GetResult();1184                                page.Keyboard.PressAsync("Enter");1185                            }1186                        }1187                        catch (Exception)1188                        {1189                            //ignored  1190                        }1191                    }1192                    Thread.Sleep(1000);1193                }1194            }1195            if (itm.Service == StreamService.Service.BigoLive)1196            {1197                Thread.Sleep(2000);1198                page.ReloadAsync().GetAwaiter().GetResult();1199                1200                /*if (itm.LoginInfo != null)1201                {1202                    Thread.Sleep(1000);1203                    var allCookies = GetCookie(itm.LoginInfo.Username);1204                    if (allCookies != null)1205                        foreach (var cookie in allCookies)1206                        {1207                            Cookie[] cookies =1208                            {1209                                new()...

Full Screen

Full Screen

BrowserFixture.cs

Source:BrowserFixture.cs Github

copy

Full Screen

...284            {285                Directory.CreateDirectory(VideosDirectory);286            }287            using var file = File.OpenWrite(path);288            using var stream = await response.Content.ReadAsStreamAsync();289            await stream.CopyToAsync(file);290            OutputHelper.WriteLine($"Video saved to {path}.");291            break;292        }293    }294    private async Task TrySetSessionStatusAsync(IPage page, string status, string reason = "")295    {296        if (!Options.UseBrowserStack)297        {298            return;299        }300        // See https://www.browserstack.com/docs/automate/playwright/mark-test-status#mark-the-status-of-your-playwright-test-using-rest-api-duringafter-the-test-script-run301        string json = JsonSerializer.Serialize(new302        {...

Full Screen

Full Screen

BingEntitySearchSkill.cs

Source:BingEntitySearchSkill.cs Github

copy

Full Screen

...172        {173            log.LogInformation("Entity Search function: C# HTTP trigger function processed a request.");174            var response = new WebApiResponse();175            response.values = new List<OutputRecord>();176            string requestBody = new StreamReader(req.Body).ReadToEnd();177            var data = JsonConvert.DeserializeObject<WebApiRequest>(requestBody);178            // Do some schema validation179            if (data == null)180            {181                return new BadRequestObjectResult("The request schema does not match expected schema.");182            }183            if (data.values == null)184            {185                return new BadRequestObjectResult("The request schema does not match expected schema. Could not find values array.");186            }187            // Calculate the response for each value.188            foreach (var record in data.values)189            {190                if (record == null || record.recordId == null) continue;...

Full Screen

Full Screen

AspNetProcess.cs

Source:AspNetProcess.cs Github

copy

Full Screen

...113                return await _httpClient.SendAsync(request);114            }, logger: NullLogger.Instance);115            Assert.Equal(HttpStatusCode.OK, response.StatusCode);116            var parser = new HtmlParser();117            var html = await parser.ParseAsync(await response.Content.ReadAsStreamAsync());118            foreach (IHtmlLinkElement styleSheet in html.GetElementsByTagName("link"))119            {120                Assert.Equal("stylesheet", styleSheet.Relation);121                await AssertOk(styleSheet.Href.Replace("about://", string.Empty));122            }123            foreach (var script in html.Scripts)124            {125                if (!string.IsNullOrEmpty(script.Source))126                {127                    await AssertOk(script.Source);128                }129            }130            Assert.True(html.Links.Length == page.Links.Count(), $"Expected {page.Url} to have {page.Links.Count()} links but it had {html.Links.Length}");131            foreach ((var link, var expectedLink) in html.Links.Zip(page.Links, Tuple.Create))...

Full Screen

Full Screen

Startup.cs

Source:Startup.cs Github

copy

Full Screen

...28            #endregion29#pragma warning disable CA2000 // Dispose objects before losing scope30            // Replace the Console.Error stream to record error output from Playwright in Application Insights31            var telemetryClient = new TelemetryClient(new TelemetryConfiguration(Environment.GetEnvironmentVariable("APPINSIGHTS_INSTRUMENTATIONKEY")));32            var errorStream = new ApplicationInsightsStream(10240, telemetryClient);33            Console.SetError(TextWriter.Synchronized(new StreamWriter(errorStream)34            {35                AutoFlush = true,36            }));37#pragma warning restore CA2000 // Dispose objects before losing scope38            var playwrightBrowsersPath = Environment.GetEnvironmentVariable("PLAYWRIGHT_BROWSERS_PATH")!;39            // Create the Playwright browsers directory manually so we get a clear exception message if we don't have permission40            Directory.CreateDirectory(playwrightBrowsersPath);41            // Install the browser required by Playwright 42            Microsoft.Playwright.Program.Main(new[] { "install", "chromium" });43            var connectionString = Environment.GetEnvironmentVariable("AzureAppConfigurationConnectionString");44            if (string.IsNullOrEmpty(connectionString))45            {46                throw new InvalidOperationException("AzureAppConfigurationConnectionString app setting is required");47            }...

Full Screen

Full Screen

PlaywrightVisualTestBuilder.cs

Source:PlaywrightVisualTestBuilder.cs Github

copy

Full Screen

...8    public class PlaywrightVisualTestBuilder : VisualTestBuilderBase9    {10        public PlaywrightVisualTestBuilder(IPage page, string name) :11            base(name,12                () => new Bitmap(new MemoryStream(page.ScreenshotAsync().Result)),13                () => new Bitmap(new MemoryStream(page.ScreenshotAsync(new PageScreenshotOptions14                {15                    FullPage = true16                }).Result)))17        {}18        public PlaywrightVisualTestBuilder SetWebElement(IElementHandle element)19        {20            var rect = element.BoundingBoxAsync().Result;21            SetViewportRectangle(new Rectangle((int) rect.X, (int) rect.Y, (int) rect.Width, (int) rect.Height));22            return this;23        }24        public PlaywrightVisualTestBuilder SetIgnoredElements(List<(IElementHandle, Color)> ignoredElements)25        {26            var ignoredRectangles = new List<(Rectangle, Color)>();27            foreach (var (element, color) in ignoredElements)...

Full Screen

Full Screen

SessionConfigurationDto.cs

Source:SessionConfigurationDto.cs Github

copy

Full Screen

...6        public string Url { get; set; }7        public int Count { get; set; }8        public string PreferredQuality { get; set; }9        public LoginDto LoginInfo { get; set; }10        public StreamService.Service Service { get; set; }11        public Proxy Proxy { get; set; }12    }13}...

Full Screen

Full Screen

Stream

Using AI Code Generation

copy

Full Screen

1var playwright = await Playwright.CreateAsync();2var browser = await playwright.Chromium.LaunchAsync(new LaunchOptions3{4});5var context = await browser.NewContextAsync();6var page = await context.NewPageAsync();7await page.ScreenshotAsync("screenshot.png");8var playwright = await Playwright.CreateAsync();9var browser = await playwright.Chromium.LaunchAsync(new LaunchOptions10{11});12var context = await browser.NewContextAsync();13var page = await context.NewPageAsync();14var stream = new MemoryStream();15await page.ScreenshotAsync(stream);16using (var fileStream = new FileStream("screenshot.png", FileMode.Create))17{18    stream.Position = 0;19    stream.CopyTo(fileStream);20}21var playwright = await Playwright.CreateAsync();22var browser = await playwright.Chromium.LaunchAsync(new LaunchOptions23{24});25var context = await browser.NewContextAsync();26var page = await context.NewPageAsync();27await page.ScreenshotAsync("screenshot.png");28var playwright = await Playwright.CreateAsync();29var browser = await playwright.Chromium.LaunchAsync(new LaunchOptions30{31});32var context = await browser.NewContextAsync();33var page = await context.NewPageAsync();34var stream = new MemoryStream();35await page.ScreenshotAsync(stream);36using (var fileStream = new FileStream("screenshot.png", FileMode.Create))37{38    stream.Position = 0;39    stream.CopyTo(fileStream);40}41var playwright = await Playwright.CreateAsync();42var browser = await playwright.Chromium.LaunchAsync(new LaunchOptions43{44});45var context = await browser.NewContextAsync();46var page = await context.NewPageAsync();47await page.ScreenshotAsync("s

Full Screen

Full Screen

Stream

Using AI Code Generation

copy

Full Screen

1using Microsoft.Playwright;2using System;3using System.IO;4using System.Threading.Tasks;5{6    {7        static async Task Main(string[] args)8        {9            using var playwright = await Playwright.CreateAsync();10            await using var browser = await playwright.Chromium.LaunchAsync();11            var page = await browser.NewPageAsync();12            await page.ScreenshotAsync(new PageScreenshotOptions { Path = "screenshot.png" });13        }14    }15}16using Microsoft.Playwright;17using System;18using System.IO;19using System.Threading.Tasks;20{21    {22        static async Task Main(string[] args)23        {24            using var playwright = await Playwright.CreateAsync();25            await using var browser = await playwright.Chromium.LaunchAsync();26            var page = await browser.NewPageAsync();27            await page.ScreenshotAsync(new PageScreenshotOptions { Path = "screenshot.png" });28        }29    }30}31using Microsoft.Playwright;32using System;33using System.IO;34using System.Threading.Tasks;35{36    {37        static async Task Main(string[] args)38        {39            using var playwright = await Playwright.CreateAsync();40            await using var browser = await playwright.Chromium.LaunchAsync();41            var page = await browser.NewPageAsync();42            await page.ScreenshotAsync(new PageScreenshotOptions { Path = "screenshot.png" });43        }44    }45}46using Microsoft.Playwright;47using System;48using System.IO;49using System.Threading.Tasks;50{51    {52        static async Task Main(string[] args)53        {54            using var playwright = await Playwright.CreateAsync();55            await using var browser = await playwright.Chromium.LaunchAsync();56            var page = await browser.NewPageAsync();57            await page.ScreenshotAsync(new Page

Full Screen

Full Screen

Stream

Using AI Code Generation

copy

Full Screen

1using Microsoft.Playwright.Core;2using System.IO;3using System.Threading.Tasks;4{5    {6        static async Task Main(string[] args)7        {8            using var playwright = await Playwright.CreateAsync();9            await using var browser = await playwright.Webkit.LaunchAsync();10            var page = await browser.NewPageAsync();11            var element = await page.QuerySelectorAsync("input[name=q]");12            await element.TypeAsync("Hello World");13            var stream = File.OpenWrite("screenshot.png");14            await page.ScreenshotAsync(new ScreenshotOptions { Path = stream });15            stream.Dispose();16        }17    }18}19using Microsoft.Playwright.Core;20using System.IO;21using System.Threading.Tasks;22{23    {24        static async Task Main(string[] args)25        {26            using var playwright = await Playwright.CreateAsync();27            await using var browser = await playwright.Webkit.LaunchAsync();28            var page = await browser.NewPageAsync();29            var element = await page.QuerySelectorAsync("input[name=q]");30            await element.TypeAsync("Hello World");31            var stream = File.OpenWrite("screenshot.png");32            await page.ScreenshotAsync(new ScreenshotOptions { Path = stream });33            stream.Dispose();34        }35    }36}37using Microsoft.Playwright.Core;38using System.IO;39using System.Threading.Tasks;40{41    {42        static async Task Main(string[] args)43        {44            using var playwright = await Playwright.CreateAsync();45            await using var browser = await playwright.Webkit.LaunchAsync();46            var page = await browser.NewPageAsync();47            var element = await page.QuerySelectorAsync("input[name=q]");48            await element.TypeAsync("Hello World");49            var stream = File.OpenWrite("screenshot.png");50            await page.ScreenshotAsync(new ScreenshotOptions { Path = stream });51            await stream.DisposeAsync();52        }53    }54}

Full Screen

Full Screen

Stream

Using AI Code Generation

copy

Full Screen

1using Microsoft.Playwright.Core;2using System;3using System.IO;4using System.Threading.Tasks;5{6    {7        static async Task Main(string[] args)8        {9            var playwright = await Playwright.CreateAsync();10            var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions { Headless = false });11            var context = await browser.NewContextAsync();12            var page = await context.NewPageAsync();13            var element = await page.QuerySelectorAsync("input[name='q']");14            await element.TypeAsync("Hello World");15            var screenshotStream = await page.ScreenshotStreamAsync();16            using (var fileStream = File.Create("screenshot.png"))17            {18                screenshotStream.Seek(0, SeekOrigin.Begin);19                await screenshotStream.CopyToAsync(fileStream);20            }21            await browser.CloseAsync();22            await playwright.StopAsync();23        }24    }25}

Full Screen

Full Screen

Stream

Using AI Code Generation

copy

Full Screen

1using System;2using System.IO;3using System.Threading.Tasks;4using Microsoft.Playwright.Core;5using Microsoft.Playwright.Core.Helpers;6{7    {8        public static async Task Main(string[] args)9        {10            using var playwright = await Playwright.CreateAsync();11            await using var browser = await playwright.Chromium.LaunchAsync();12            var page = await browser.NewPageAsync();13            var elementHandle = await page.QuerySelectorAsync("body");14            var stream = await elementHandle.ScreenshotStreamAsync();15            using var fileStream = File.Create("screenshot.png");16            await stream.CopyToAsync(fileStream);17        }18    }19}20var elementHandle = await page.QuerySelectorAsync("html");21var elementHandle = await page.QuerySelectorAsync("#elementId");22var elementHandle = await page.QuerySelectorAsync("body");

Full Screen

Full Screen

Stream

Using AI Code Generation

copy

Full Screen

1using System;2using System.IO;3using Microsoft.Playwright.Core;4using System.Threading.Tasks;5using System.Threading;6{7    {8        public static async Task Main(string[] args)9        {10            var playwright = await Playwright.CreateAsync();11            var browser = await playwright.Chromium.LaunchAsync();12            var context = await browser.NewContextAsync();13            var page = await context.NewPageAsync();14            await page.ScreenshotAsync(new PageScreenshotOptions15            {16            });17            await browser.CloseAsync();18        }19    }20}21using System;22using System.IO;23using Microsoft.Playwright;24using System.Threading.Tasks;25using System.Threading;26{27    {28        public static async Task Main(string[] args)29        {30            var playwright = await Playwright.CreateAsync();31            var browser = await playwright.Chromium.LaunchAsync();32            var context = await browser.NewContextAsync();33            var page = await context.NewPageAsync();34            await page.ScreenshotAsync(new PageScreenshotOptions35            {36            });37            await browser.CloseAsync();38        }39    }40}41using System;42using System.IO;43using Microsoft.Playwright;44using System.Threading.Tasks;45using System.Threading;46{47    {48        public static async Task Main(string[] args)49        {50            var playwright = await Playwright.CreateAsync();51            var browser = await playwright.Chromium.LaunchAsync();52            var context = await browser.NewContextAsync();53            var page = await context.NewPageAsync();54            await page.ScreenshotAsync(new PageScreenshotOptions55            {56            });57            await browser.CloseAsync();58        }59    }60}61using System;62using System.IO;63using Microsoft.Playwright;64using System.Threading.Tasks;65using System.Threading;66{67    {68        public static async Task Main(string[]

Full Screen

Full Screen

Stream

Using AI Code Generation

copy

Full Screen

1using System;2using System.IO;3using System.Text;4using System.Threading.Tasks;5using Microsoft.Playwright;6{7    {8        static async Task Main(string[] args)9        {10            await using var playwright = await Playwright.CreateAsync();11            await using var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions12            {13            });14            var page = await browser.NewPageAsync();15            await page.ScreenshotAsync("google.png");

Full Screen

Full Screen

Stream

Using AI Code Generation

copy

Full Screen

1using System;2using System.IO;3using System.Text;4using System.Threading.Tasks;5using Microsoft.Playwright;6{7    {8        static async Task Main(string[] args)9        {10            using var playwright = await Playwright.CreateAsync();11            using var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions12            {13            });14            var page = await browser.NewPageAsync();15            Stream stream = new FileStream("C:\\test\\test.txt", FileMode.Open, FileAccess.Read);16            using (StreamReader reader = new StreamReader(stream))17            {18                Console.WriteLine(await reader.ReadToEndAsync());19            }20            stream.Close();21            await page.CloseAsync();22            await browser.CloseAsync();23        }24    }25}

Full Screen

Full Screen

Stream

Using AI Code Generation

copy

Full Screen

1using Microsoft.Playwright;2using System.IO;3using System.Threading.Tasks;4{5    {6        public async Task<string> ReadFileAsync()7        {8            var playwright = await Playwright.CreateAsync();9            var browserType = playwright.Chromium;10            var browser = await browserType.LaunchAsync(headless: false);11            var page = await browser.NewPageAsync();12            var file = await page.WaitForFileAsync("**/2.cs");13            var stream = await file.OpenAsync();14            var reader = new StreamReader(stream);15            var text = await reader.ReadToEndAsync();16            return text;17        }18    }19}20using Microsoft.Playwright;21using System;22using System.IO;23using System.Threading.Tasks;24{25    {26        static async Task Main(string[] args)27        {28            var playwright = await Playwright.CreateAsync();29            var browserType = playwright.Chromium;30            var browser = await browserType.LaunchAsync(headless: false);31            var page = await browser.NewPageAsync();32            var text = await page.EvaluateAsync<string>("() => document.body.innerText");33            File.WriteAllText("2.cs", text);34            Console.WriteLine("done");35            Console.ReadKey();36        }37    }38}39using Microsoft.Playwright;40using System;41using System.IO;42using System.Threading.Tasks;43{44    {45        public async Task<string> ReadFileAsync()46        {47            var playwright = await Playwright.CreateAsync();48            var browserType = playwright.Chromium;49            var browser = await browserType.LaunchAsync(headless: false);50            var page = await browser.NewPageAsync();51            var file = await page.WaitForFileAsync("**/2.cs");52            var stream = await file.OpenAsync();53            var reader = new StreamReader(stream);54            var text = await reader.ReadToEndAsync();55            return text;56        }57    }58}59using Microsoft.Playwright;60using System;61using System.IO;62using System.Threading.Tasks;63{64    {65        static async Task Main(string[] args)

Full Screen

Full Screen

Playwright tutorial

LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.

Chapters:

  1. What is Playwright : Playwright is comparatively new but has gained good popularity. Get to know some history of the Playwright with some interesting facts connected with it.
  2. How To Install Playwright : Learn in detail about what basic configuration and dependencies are required for installing Playwright and run a test. Get a step-by-step direction for installing the Playwright automation framework.
  3. Playwright Futuristic Features: Launched in 2020, Playwright gained huge popularity quickly because of some obliging features such as Playwright Test Generator and Inspector, Playwright Reporter, Playwright auto-waiting mechanism and etc. Read up on those features to master Playwright testing.
  4. What is Component Testing: Component testing in Playwright is a unique feature that allows a tester to test a single component of a web application without integrating them with other elements. Learn how to perform Component testing on the Playwright automation framework.
  5. Inputs And Buttons In Playwright: Every website has Input boxes and buttons; learn about testing inputs and buttons with different scenarios and examples.
  6. Functions and Selectors in Playwright: Learn how to launch the Chromium browser with Playwright. Also, gain a better understanding of some important functions like “BrowserContext,” which allows you to run multiple browser sessions, and “newPage” which interacts with a page.
  7. Handling Alerts and Dropdowns in Playwright : Playwright interact with different types of alerts and pop-ups, such as simple, confirmation, and prompt, and different types of dropdowns, such as single selector and multi-selector get your hands-on with handling alerts and dropdown in Playright testing.
  8. Playwright vs Puppeteer: Get to know about the difference between two testing frameworks and how they are different than one another, which browsers they support, and what features they provide.
  9. Run Playwright Tests on LambdaTest: Playwright testing with LambdaTest leverages test performance to the utmost. You can run multiple Playwright tests in Parallel with the LammbdaTest test cloud. Get a step-by-step guide to run your Playwright test on the LambdaTest platform.
  10. Playwright Python Tutorial: Playwright automation framework support all major languages such as Python, JavaScript, TypeScript, .NET and etc. However, there are various advantages to Python end-to-end testing with Playwright because of its versatile utility. Get the hang of Playwright python testing with this chapter.
  11. Playwright End To End Testing Tutorial: Get your hands on with Playwright end-to-end testing and learn to use some exciting features such as TraceViewer, Debugging, Networking, Component testing, Visual testing, and many more.
  12. Playwright Video Tutorial: Watch the video tutorials on Playwright testing from experts and get a consecutive in-depth explanation of Playwright automation testing.

Run Playwright-dotnet automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful