Запустите Chrome и дождитесь его закрытия [дубликат]

На этот вопрос уже есть ответ здесь:

Запустите Firefox и дождитесь его закрытия 1 ответВопрос

Я хочу запустить веб-браузер Chrome как процесс для посещения определенного веб-сайта, а затем дождаться его закрытия.

Особая ситуация заключается в том, что браузер уже может быть открыт и запущен, так как пользователь, возможно, уже посетил какой-то веб-сайт.

В этом случае браузер, вероятно, откроет новую вкладку в существующем окне, и вновь запущенный процесс будет немедленно прекращен. Это не должно сбивать с толку мой процесс ожидания: либо я хочу новое окно браузера (если это может быть каким-то образом принудительно применено, возможно, с помощью аргументов командной строки) и подожду, пока оно не закроется, либо оставлю существующее окно браузера и дождаться появления всех вкладок от моего процесса закрыты.

Среда

Я думаю, что это не имеет значения, но моя среда программированияJava и вы можете предположить, что я знаю путь браузера.

пример

Единственный браузер, для которого я могу получить ожидаемое поведениеInternet Explorer (вздох.). Здесь мне нужно в основном создать новый пакетный скрипт во временной папке с чем-то вроде

start /WAIT "" "C:\Program Files\Internet Explorer\iexplore.exe" -noframemerging http://www.test.com/

Затем я запускаю пакетный скрипт вместо браузера напрямую и удаляю его по окончании ожидания.

Предполагаемый процесс

Чтобы сделать намеченный процесс более понятным:

Моя программа запускается.Моя программа запускает браузер Chrome как отдельный процесс и предоставляет URL для посещения в качестве аргумента этого процесса.Браузер Chrome запускается асинхронно, как новый процесс, и посещает указанный URL-адрес. Пока это легко.После запуска нового процесса (браузера Chrome) моя собственная программа должна дождаться завершения указанного процесса. Это сложная часть, так какМногие современные браузеры запускают несколько процессов. Я должен был бы ждать их всех.Многие современные браузеры могут как-то «отсоединиться» от процесса, который я запустил. Извините, я не знаю лучшего слова, что я имею в виду: я запускаю процесс, который затем запускает другой процесс и немедленно завершается, пока другой процесс продолжает работать. Если я подожду, пока браузер не запустит процесс, изначально запущенный моей программой, ожидание будет завершено, пока браузер еще открыт.Частным случаем вышеупомянутого является просмотр с вкладками, как это реализовано во многих браузерах: если браузер уже открыт (в отдельном процессе, запущенном пользователем), когда я его запускаю, мой недавно запущенный процесс браузера может просто сообщить URL-адрес для посещения существующий процесс и прекратить. Пользователь по-прежнему находится на указанном мной URL, а моя программа считает, что она закрыла браузер. Эта проблема может быть запрещена указанием специального аргумента командной строки, напримерnoframemerging для IE.После завершения работы браузера или закрытия всех вкладок, связанных с указанным мной URL, моя программа перестанет ждать и продолжит свою работу.

Случай использования - у меня есть веб-приложение, которое может работать локально или на сервере. Если он запускается локально, он запускает веб-сервер, а затем открывает браузер, чтобы посетить страницу ввода. После закрытия браузера это веб-приложение также должно быть закрыто. Это работает надежно для Internet Explorer, во всех остальных случаях пользователь должен закрыть браузер и затем явно веб-приложение. Таким образом, если бы я мог надежно дождаться окончания Chrome, это значительно улучшило бы пользовательский опыт.

Настройки решения:

Решения предпочтительны в следующем порядке

Все, что поставляется с чистой Java JRE. Это включает в себя специальные аргументы командной строки для браузера.Вещи, которые требуют от меня, например, создания пакетного сценария (например, в случае IE).Все, что требует сторонних библиотек с открытым исходным кодом.Все, что требует сторонних библиотек с закрытым исходным кодом.

Любой независимый от платформы ответ (работает как в Windows, так и в Linux) предпочтительнее, чем зависимый от платформы.

Причина: в идеальном случае я хотел бы знать, что именно делается, и включить это в свой собственный код. Поскольку я хочу поддерживать разные браузеры (см. «PS» ниже), я бы хотел избежать включения одной библиотеки на браузер. Наконец, я не могу использовать коммерческие библиотеки или библиотеки с закрытыми исходными кодами, но, если не найдется лучшего ответа, я, конечно, сделаю все возможное решение с подтверждением. Я приму первый (достаточно хороший) рабочий ответ типа «1». Если появятся ответы с более низкими предпочтениями, я подожду несколько дней, прежде чем принять лучший из них.

PS

Я запущу пару подобных вопросов для других браузеров. Поскольку я считаю, что браузеры сильно отличаются по аргументам командной строки, которые они переваривают, по способу запуска потоков и подпроцессов, я думаю, что это имеет смысл.

Подобный вопрос относительно Firefox:Запустите Firefox и дождитесь его закрытияПодобный вопрос относительно Opera:Запустите Opera и дождитесь ее закрытияПодобный вопрос относительно хрома:Запустите Chromium и дождитесь его закрытияПодобный вопрос относительно Edge:Запустите Edge Browser и дождитесь его закрытияПодобный вопрос относительно Safari:Запустите Safari и дождитесь его закрытия

Ответы на вопрос(0)

Ваш ответ на вопрос