繁体   English   中英

如何使用 Selenium WebDriver + Java 获取浏览器实例的 PID?

[英]How to get PID of a browser instance using Selenium WebDriver + Java?

要将浏览器置于最前面,根据评论之一,我需要获取浏览器的 PID。 有助于获得 PID,但这是针对 Python 的。 有什么办法,我可以使用 Selenium WebDriver + Java 获取浏览器的 PID?

要使用Selenium检索由WebDriver启动和控制的Firefox 浏览器的 PID,您可以使用getCapabilities()方法,您可以使用以下解决方案:

  • 代码块:

     import java.io.IOException; import org.openqa.selenium.Capabilities; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.remote.RemoteWebDriver; public class PID_Firefox_Java { public static void main(String[] args) throws IOException { System.setProperty("webdriver.gecko.driver", "C:\\\\Utility\\\\BrowserDrivers\\\\geckodriver.exe"); WebDriver driver = new FirefoxDriver(); Capabilities cap = ((RemoteWebDriver) driver).getCapabilities(); System.out.println("moz:processID value is : "+cap.getCapability("moz:processID")); } }
  • 控制台输出:

     moz:processID value is : 4576

我不确定 Chrome 是否可以像 @DebanjanB 为 Firefox 发布的那样直接使用。 您现在可以使用下面的代码来实现

public static void main(String[] args) throws IOException {

    System.out.println(new Example().getProcessId("firefox"));
}


public String getProcessId(String browserName) throws IOException {
    int port = 0;
    WebDriver driver;


    if (browserName.equalsIgnoreCase("firefox")) {
        WebDriverManager.firefoxdriver().setup();
        GeckoDriverService service = GeckoDriverService.createDefaultService();
        driver = new FirefoxDriver(service);
        port = service.getUrl().getPort();


    } else if (browserName.equalsIgnoreCase("chrome")) {
        WebDriverManager.chromedriver().setup();
        ChromeDriverService service = ChromeDriverService.createDefaultService();
        driver = new ChromeDriver(service);
        port = service.getUrl().getPort();

    }
    BufferedReader reader = new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec("lsof -i :" + port).getInputStream()));
    StringBuilder builder = new StringBuilder();
    String line = null;
    Set<String> set = new HashSet<String>();
    while ((line = reader.readLine()) != null) {
        if (line.contains(String.valueOf(port)) && line.contains("LISTEN")) {
            set.add(line.split(" ")[1]);
        }
    }
    return set.iterator().next();
}

更新:

对于 Windows,命令是不同的。 所以需要在上面的代码中做一些调整。

BufferedReader reader = new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec("netstat -aon | find \""+ port+"\"").getInputStream()));
StringBuilder builder = new StringBuilder();
String line = null;
Set<String> set = new HashSet<String>();
while ((line = reader.readLine()) != null) {
    if (line.contains(String.valueOf(port)) && line.contains("LISTEN")) {
        String s[]=line.split(" ");
        set.add(s[s.length-1]);
    }
}
return set.iterator().next();

注意:我传递给获取 PID 的命令是在 Mac 上使用的。 如果它不起作用,请根据操作系统进行更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM