Невозможно создать объект веб-драйвера, если контейнер селена завис в середине сеанса.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Невозможно создать объект веб-драйвера, если контейнер селена завис в середине сеанса.

Сообщение Anonymous »

У меня есть следующий фрагмент кода, который я использую для создания веб-драйверов для приложения весенней загрузки.
public RemoteWebDriver createDriver() {
ChromeOptions options = new ChromeOptions();
URL containerLocator;

try {
URI containerIdentifier = new URI(this.driverSocket);
containerLocator = containerIdentifier.toURL();
}
catch (URISyntaxException | MalformedURLException e) {
this.logService.createInfoLog(this.messageService.createChapterURLExceptionMessage(this.driverSocket));
return null;
}

this.logService.createInfoLog(this.messageService.getLoggingInfoChapterCreatedDriver());
return new RemoteWebDriver(containerLocator, options);
}

Этот код используется для создания драйверов всякий раз, когда я вызываю службу весенней загрузки, например, для анализа селена -
@Async
public CompletableFuture startParsingTask(String sessionId) {
RemoteWebDriver driver = this.createDriver();
if (driver.getSessionId() != null) {
this.logService.createInfoLog(this.messageService.getLoggingInfoActiveSessionFound());
driver.quit();
driver = this.createDriver();
}
else {
this.logService.createInfoLog(this.messageService.getLoggingInfoNoActiveSessionFound());
}

// Try to parse and quit the driver after the attempt
try {
this.doParsingTask(driver, sessionId);
this.logService.createInfoLog(this.messageService.getLoggingInfoParseSucceeded());
driver.quit();
this.logService.createInfoLog(this.messageService.getLoggingInfoQuitDriver());
}
...
}

Меня не интересует второй блок кода. Моя проблема в том, что из-за асинхронного характера моих сеансов Selenium в некоторых случаях задача выдает исключение и ошибку. В результате контейнер селена, к которому подключается драйвер, застрянет в середине сеанса и не будет завершен должным образом. Если серверная часть Spring Boot затем попытается запустить задачу, требующую драйвера, она просто зависнет на этой строке из первого блока кода -
return new RemoteWebDriver(containerLocator, options);

Я протестировал свою программу и определил, что именно здесь мои асинхронные задачи застревают, но я не знаю, как это исправить с помощью первого блока кода. Я проверил аналогичные сообщения в Stack Overflow, но все они дают решения, которые требуют, чтобы сначала был создан экземпляр объекта веб-драйвера, который я не могу использовать, потому что программа зависает при создании экземпляра.
Есть ли способ изменить первый блок кода для создания сеанса веб-драйвера, не застревая из-за зависания сеанса в контейнере селена?
Для дальнейшего контекста, вот команда docker, которую я использую для создания контейнера:
docker run -d -p 4444:4444 -p 7900:7900 --shm-size="2g" selenium/standalone-chrome:136.0-20251101


Подробнее здесь: https://stackoverflow.com/questions/798 ... k-in-the-m
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»