Пример #1
0
        private static async Task <BookInfoSeeker> ReopenSeeker(BookInfoSeeker seeker)
        {
            seeker?.Clicker.Dispose();

            var clicker = await CreateClicker(ChromeOptions);

            seeker = new BookInfoSeeker(clicker);
            return(seeker);
        }
Пример #2
0
        public async Task Explore(CancellationToken cancellationToken)
        {
            _seeker = await OpenSeeker();

            var captchaErrors   = 0;
            var downloadedBooks = 0;

            while (true)
            {
                cancellationToken.ThrowIfCancellationRequested();

                try
                {
                    await ExploringStep(cancellationToken);

                    downloadedBooks++;
                    captchaErrors = 0;
                }
                catch (Exception exception) when(exception.Message.Contains("captcha"))
                {
                    _logger.Warning("Detected captcha.");

                    captchaErrors++;
                    if (captchaErrors > 5)
                    {
                        captchaErrors = 0;

                        _logger.Information("Reopening chrome driver...");
                        _seeker = await ReopenSeeker(_seeker);

                        _logger.Information("Opened new istance of chrome driver");
                    }
                }
                catch (Exception ex) when(ex.GetType().Namespace == "OpenQA.Selenium")
                {
                    _logger.Error(ex, "Error in Selenium driver");
                    _seeker = await ReopenSeeker(_seeker);
                }
                catch (InvalidOperationException ioe) when(ioe.Message.Contains("was not read"))
                {
                    _logger.Error(ioe, "Error while exploring ekw");
                    _seeker = await ReopenSeeker(_seeker);
                }

                _logger.Debug("Downloaded books: {DownloadedBooks}", downloadedBooks);
            }
        }