Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using Azure.Storage.Blobs;
- using Screenshot_WorkerService.Interface;
- using Screenshot_WorkerService.Service;
- using OpenQA.Selenium.Chrome;
- using OpenQA.Selenium.Support.UI;
- using OpenQA.Selenium;
- using OpenQA.Selenium.Support.Extensions;
- using System.Drawing;
- namespace Screenshot_WorkerService
- {
- public class Worker : BackgroundService
- {
- private readonly ILogger<Worker> _logger;
- private readonly IBlobStorageServiceClient _blobServiceClient;
- public Worker(ILogger<Worker> logger, IBlobStorageServiceClient blobServiceClient)
- {
- _logger = logger;
- _blobServiceClient = blobServiceClient;
- }
- protected override async Task ExecuteAsync(CancellationToken stoppingToken)
- {
- while (!stoppingToken.IsCancellationRequested)
- {
- _logger.LogInformation("Worker running at: {time}", DateTime.Now);
- var timeout = 10;
- _logger.LogInformation("Reading urls values from blob");
- var urlConfiguration = await _blobServiceClient.DownloadConfigrationBlob();
- if (urlConfiguration.Urls is not null)
- {
- foreach (var item in urlConfiguration.Urls)
- {
- _logger.LogInformation("Preparing headless web browser");
- var options = new ChromeOptions();
- options.AddArguments(new List<string> { "--headless", "--hide-scrollbars" });
- using var driver = new ChromeDriver(options);
- _logger.LogInformation("web browser complete");
- driver.Manage().Window.Size = new Size(item.Width, item.Height);
- driver.Navigate().GoToUrl(item.Url);
- driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(timeout);
- try
- {
- _logger.LogInformation($"Searching class element: {timeout}");
- var element = new WebDriverWait(driver, TimeSpan.FromSeconds(timeout)).Until((d) =>
- {
- d.Navigate().GoToUrl(item.Url);
- Thread.Sleep(5000);
- return d.FindElement(By.ClassName("v-menu"));
- });
- var screenshot = driver.TakeScreenshot();
- #if DEBUG
- screenshot.SaveAsFile($"{DateTime.Now:yyyy-MM-dd-HH-mm-ss}.png");
- #endif
- //Save to blobStorage
- _blobServiceClient.UploadImageToBlobAsync(screenshot);
- }
- catch (NoSuchElementException e)
- {
- // try Login
- _logger.LogInformation($"Exception: {e.Message}");
- _logger.LogInformation($"Trying automate login");
- var username = driver.FindElement(By.Id("input-12\""));
- username.Clear();
- username.SendKeys("");
- var password = driver.FindElement(By.Id("input-13"));
- password.Clear();
- password.SendKeys("");
- var loginButton = driver.FindElement(By.XPath("//button[@class='v-btn v-btn--block v-btn--outlined theme--dark v-size--default primary--text']\r\n"));
- loginButton.Click();
- driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(timeout);
- var screenshot = driver.TakeScreenshot();
- #if DEBUG
- screenshot.SaveAsFile($"{DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss")}.png");
- #endif
- //Save to blobStorage
- _blobServiceClient.UploadImageToBlobAsync(screenshot);
- }
- catch (WebDriverTimeoutException e)
- {
- _logger.LogInformation($"Exception trying login was timed out: {e.Message}");
- }
- catch (Exception e) {
- _logger.LogInformation($"Exception: {e.Message}");
- }
- }
- }
- else
- {
- _logger.LogWarning("Reading returned no urls, check the blobstorage for url values");
- }
- _logger.LogWarning("Done!");
- await Task.Delay(TimeSpan.FromMinutes(20), stoppingToken);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement