Starte Chrome und warte, bis es geschlossen ist [duplizieren]

Diese Frage hat hier bereits eine Antwort:

tarten Sie Firefox und warten Sie, bis es geschlossen i 1 AntwortFrag

Ich möchte den Chrome-Webbrowser als Prozess starten, um eine bestimmte Website zu besuchen, und dann warten, bis sie geschlossen ist.

Eine besondere Situation ist, dass der Browser möglicherweise bereits geöffnet ist und ausgeführt wird, da der Benutzer möglicherweise bereits eine Website besucht hat.

In diesem Fall würde der Browser wahrscheinlich einen neuen Tab in einem vorhandenen Fenster öffnen und der neu gestartete Prozess wird sofort beendet. Dies sollte meinen Wartevorgang nicht verwirren: Entweder möchte ich ein neues Browserfenster (falls dies irgendwie erzwungen werden kann, möglicherweise über Befehlszeilenargumente) und warte, bis dieses geschlossen wird, oder ich behalte das vorhandene Browserfenster und warte, bis alle Registerkarten angezeigt werden von meinem prozess sind geschlossen.

Umgebun

Ich denke, es spielt keine Rolle, aber meine Programmierumgebung istJava und Sie können davon ausgehen, dass ich den Pfad des Browsers kenne.

Beispie

Der einzige Browser, für den ich das erwartete Verhalten erhalten kann, istInternet Explore (Seufzer). Hier muss ich im Grunde genommen ein neues Batch-Skript in einem temporären Ordner mit so etwas wie @ erstelle

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

Ich führe dann das Batch-Skript anstelle des Browsers aus und lösche es, sobald ich mit dem Warten fertig bin.

Beabsichtigter Prozess

Um den beabsichtigten Prozess klarer zu machen:

Mein Programm startet.Mein Programm startet den Chrome-Browser als separaten Prozess und gibt eine zu besuchende URL als Argument für diesen Prozess an.Der Chrome-Browser wird asynchron als neuer Prozess ausgeführt und ruft die angegebene URL auf. Bisher ist das einfach.Nach dem Start des neuen Prozesses (des Chrome-Browsers) sollte mein eigenes Programm warten, bis der Prozess beendet ist. Dies ist der schwierige Teil, da Viele moderne Browser starten mehrere Prozesse. Ich müsste auf alle warten. Viele moderne Browser "lösen" sich möglicherweise von dem Prozess, den ich gestartet habe. Entschuldigung, ich kenne kein besseres Wort, was ich meine ist: Ich starte einen Prozess, der dann einen anderen Prozess startet und sofort endet, während der andere Prozess weiterläuft. Wenn ich auf den Browserprozess warte, der ursprünglich von meinem Programm gestartet wurde, wird das Warten beendet, solange der Browser noch geöffnet ist. Ein besonderer Fall ist das Surfen mit Registerkarten, wie es in vielen Browsern verwirklicht wird: Wenn der Browser beim Start bereits geöffnet ist (in einem separaten, vom Benutzer gestarteten Prozess), kann mein neu gestarteter Browser-Prozess einfach die zu besuchende URL mitteilen den bestehenden Prozess und beenden. Der Benutzer befindet sich noch unter meiner angegebenen URL, während mein Programm denkt, dass er den Browser geschlossen hat. Dieses Problem kann möglicherweise durch die Angabe eines speziellen Befehlszeilenarguments wie @ verhindert werdenoframemerging für den IE.Nachdem der Browser beendet wurde oder alle Registerkarten in Bezug auf die von mir angegebene URL geschlossen wurden, wartet mein Programm nicht mehr und arbeitet stattdessen weiter.

Der Anwendungsfall ist, dass ich eine Webanwendung habe, die entweder lokal oder auf einem Server ausgeführt werden kann. Wenn es lokal ausgeführt wird, startet es einen Webserver und öffnet dann den Browser, um die Einstiegsseite aufzurufen. Sobald der Browser geschlossen ist, sollte diese Webanwendung ebenfalls geschlossen werden. Dies funktioniert zuverlässig für den Internet Explorer. In allen anderen Fällen muss der Benutzer den Browser und dann explizit die Webanwendung schließen. Wenn ich also zuverlässig auf die Fertigstellung von Chrome warten könnte, würde dies die Benutzerfreundlichkeit erheblich verbessern.

Lösungseinstellungen:

Lösungen werden in der folgenden Reihenfolge bevorzugt

Alles, was mit der reinen Java JRE geliefert wird. Dies schließt spezielle Befehlszeilenargumente für den Browser ein.Dinge, die erfordern, dass ich z. B. ein Batch-Skript erstelle (z. B. im IE-Fall).Alles, was Open Source-Bibliotheken von Drittanbietern erfordert.Alles, was Closed-Source-Bibliotheken von Drittanbietern erfordert.

Jede plattformunabhängige Antwort (funktioniert sowohl unter Windows als auch unter Linux) wird gegenüber plattformabhängigen bevorzugt.

Grund: Im Idealfall würde ich gerne wissen, was genau gemacht wird, und es in meinen eigenen Code aufnehmen. Da ich verschiedene Browser unterstützen möchte (siehe "PS" weiter unten), möchte ich vermeiden, dass eine Bibliothek pro Browser hinzugefügt werden muss. Schließlich kann ich keine kommerziellen oder geschlossenen Quellbibliotheken verwenden, aber wenn keine bessere Antwort auftaucht, werde ich natürlich jede funktionierende Lösung mit einem Accept honorieren. Ich werde die erste (einigermaßen nette) funktionierende Antwort vom Typ "1" akzeptieren. Wenn weniger bevorzugte Antworten auftauchen, werde ich ein paar Tage warten, bevor ich die beste unter ihnen annehme.

PS

Ich werde einige ähnliche Fragen für andere Browser starten. Da ich der Meinung bin, dass die Befehlszeilenargumente, die von den Browsern verarbeitet werden, und die Art und Weise, wie die Startthreads und Unterprozesse unterschiedlich sind, ist dies meines Erachtens sinnvoll.

Ähnliche Frage zu Firefox:tarten Sie Firefox und warten Sie, bis es geschlossen iÄhnliche Frage zu Opera:tarten Sie Opera und warten Sie, bis es geschlossen iÄhnliche Frage zu Chrom:tarten Sie Chromium und warten Sie, bis es geschlossen isÄhnliche Frage zu Edge:tarten Sie den Edge-Browser und warten Sie, bis er geschlossen isÄhnliche Frage zu Safari:tarten Sie Safari und warten Sie, bis es geschlossen i

Antworten auf die Frage(2)

Ihre Antwort auf die Frage