Best Playwright-dotnet code snippet using Microsoft.Playwright.Core.Stream
BotCore.cs
Source:BotCore.cs
...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()...
BingEntitySearchSkill.cs
Source:BingEntitySearchSkill.cs
...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;...
AspNetProcess.cs
Source:AspNetProcess.cs
...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))...
Startup.cs
Source:Startup.cs
...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 }...
PlaywrightVisualTestBuilder.cs
Source:PlaywrightVisualTestBuilder.cs
...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)...
SessionConfigurationDto.cs
Source:SessionConfigurationDto.cs
...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}...
Stream
Using AI Code Generation
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
Stream
Using AI Code Generation
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
Stream
Using AI Code Generation
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}
Stream
Using AI Code Generation
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}
Stream
Using AI Code Generation
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");
Stream
Using AI Code Generation
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[]
Stream
Using AI Code Generation
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");
Stream
Using AI Code Generation
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}
Stream
Using AI Code Generation
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)
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.
Get 100 minutes of automation test minutes FREE!!