小编典典

启动Safari,然后等待其关闭

java

我想启动Safari Web浏览器作为访问特定网站的过程,然后等待直到它关闭。

一种特殊情况是浏览器可能已经打开并正在运行,因为用户可能已经访问过某些网站。

在这种情况下,浏览器可能会在现有窗口中打开一个新选项卡,并且新启动的过程将立即终止。这不应该让我的等待过程感到困惑:我要么想要一个新的浏览器窗口(如果可以通过命令行参数强制执行),然后等待直到关闭该窗口,要么保留现有的浏览器窗口并等待直到所有的选项卡由我的过程已关闭。

环境

我认为这无关紧要,但是我的编程环境很重要Java,您可以假设我知道浏览器的路径。

我可以获得其预期行为的唯一浏览器是Internet
Explorer
(叹气)。在这里,我基本上需要在temp文件夹中创建一个类似以下内容的新批处理脚本

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

然后,我运行批处理脚本,而不是直接运行浏览器,并在等待完成后将其删除。

预期过程

为了使预期过程更加清晰:

  1. 我的程序开始。
  2. 我的程序将Safari浏览器作为单独的进程启动,并提供一个URL作为该进程的参数进行访问。
  3. Safari浏览器作为新进程异步运行,并访问提供的URL。到目前为止,这很容易。
  4. 启动新进程(Safari浏览器)后,我自己的程序应等待所述进程终止。这是困难的部分,因为
    1. 许多现代浏览器会启动多个进程。我需要等待所有这些。
    2. 许多现代浏览器可能会以某种方式将自己与我启动的过程“分离”。抱歉,我不懂一个更好的词,我的意思是:我启动一个进程,然后启动另一个进程,并在另一个进程继续运行时立即终止。如果我等待最初由程序启动的浏览器进程,则等待过程将在浏览器仍处于打开状态时完成。
    3. 上面的一种特殊情况是在许多浏览器中实现的选项卡式浏览:如果在我启动浏览器时已经打开浏览器(在用户启动的单独过程中),则新启动的浏览器进程可能会简单地传达URL来访问现有过程并终止。当我的程序认为她已关闭浏览器时,用户仍在我提供的URL上。可以通过指定特殊的命令行参数来禁止此问题,例如noframemergingIE。
  5. 一旦浏览器终止或与我提供的URL相关的所有选项卡都已关闭,我的程序将停止等待,而是继续开展业务。

用例是我有一个可以在本地或服务器上运行的Web应用程序。如果在本地运行,它将启动Web服务器,然后打开浏览器以访问条目页面。关闭浏览器后,该Web应用程序也应关闭。这对于Internet
Explorer可靠地起作用。对于所有其他情况,用户必须关闭浏览器,然后再关闭Web应用程序。因此,如果我可以可靠地等待Safari完成,那么这将使用户体验更好。

解决方案首选项:

按以下顺序优先选择解决方案

  1. 纯Java JRE附带的任何东西。这包括浏览器的特殊命令行参数。
  2. 需要我创建例如批处理脚本的内容(例如在IE中)。
  3. 任何需要第三方开放源代码库的内容。
  4. 任何需要第3方封闭源代码库的内容。

与纯Java语言相比,任何与编程语言无关的解决方案(例如,仅命令行参数)都更受青睐。

原因:在理想情况下,我想知道到底做了什么,并将其包含在我自己的代码中。因为我想支持不同的浏览器(请参见下面的“
PS”),所以我希望避免每个浏览器都包含一个库。最后,我不能使用商业或封闭源代码库,但是如果没有更好的答案,那我就可以了。当然,我将接受任何可行的解决方案。我将接受类型“
1”的第一个(相当不错的)有效答案。如果答案偏低,我将等几天再接受其中的最佳答案。

聚苯乙烯

我将针对其他浏览器提出几个类似的问题。由于我认为浏览器在其摘要的命令行参数以及它们启动线程和子进程的方式方面完全不同,因此我认为这是有道理的。如果我只是问如何启动一个/任何浏览器并等待其终止,将很难确定“正确”的答案。每个知名浏览器都有一个问题,这可能也是一个不错的参考点。


阅读 189

收藏
2020-09-28

共1个答案

小编典典

由于这里有一个Selenium Safari驱动程序

https://code.google.com/p/selenium/wiki/SafariDriver

我假设您上面想要的在使用Selenium库的MacOS(和其他OS)上是可能的。正如您在其他问题中所发表的那样,我仅在Firefox和Chrome上测试了此功能的基本功能。如果这些确实符合您的要求,那么Safari也可以实现。但是,这可能需要更多的工作。

Selenium旨在进行软件测试,但我相信它可以用于您的应用程序目的。而且我认为只要Selenium支持,其他浏览器也可以使用此技术。

对于Selenium forChromium,我在其中找到了一个提示:将Selenium与Chromium浏览器一起使用

这是Opera驱动程序的链接
https://code.google.com/p/selenium/wiki/OperaDriver

2020-09-28