У меня есть следующий фрагмент кода, который я использую для создания веб-драйверов для приложения весенней загрузки.
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
Невозможно создать объект веб-драйвера, если контейнер селена завис в середине сеанса. ⇐ JAVA
Программисты JAVA общаются здесь
1765648629
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
Подробнее здесь: [url]https://stackoverflow.com/questions/79846659/unable-to-create-a-web-driver-object-if-the-selenium-container-is-stuck-in-the-m[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия