Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取selenium启动的浏览器的PID_Selenium_Selenium Webdriver_Webdriver_Selenium Rc_Python_Dictionary - Fatal编程技术网

获取selenium启动的浏览器的PID

获取selenium启动的浏览器的PID,selenium,selenium-webdriver,webdriver,selenium-rc,python,dictionary,Selenium,Selenium Webdriver,Webdriver,Selenium Rc,Python,Dictionary,我想获得selenium启动的浏览器的PID。有什么办法可以完成吗 使用Python API,非常简单: from selenium import webdriver browser = webdriver.Firefox() print browser.binary.process.pid # browser.binary.process is a Popen object... 如果您使用的是Chrome,它会稍微复杂一些,您可以通过chromedriver流程: c = webdrive

我想获得selenium启动的浏览器的PID。有什么办法可以完成吗

使用Python API,非常简单:

from selenium import webdriver
browser = webdriver.Firefox()
print browser.binary.process.pid
# browser.binary.process is a Popen object...
如果您使用的是Chrome,它会稍微复杂一些,您可以通过chromedriver流程:

c = webdriver.Chrome()
c.service.process # is a Popen instance for the chromedriver process
import psutil
p = psutil.Process(c.service.process.pid)
print p.get_children(recursive=True)

使用Python API,它非常简单:

from selenium import webdriver
browser = webdriver.Firefox()
print browser.binary.process.pid
# browser.binary.process is a Popen object...
如果您使用的是Chrome,它会稍微复杂一些,您可以通过chromedriver流程:

c = webdriver.Chrome()
c.service.process # is a Popen instance for the chromedriver process
import psutil
p = psutil.Process(c.service.process.pid)
print p.get_children(recursive=True)

如果您使用的是PhantomJS,则可以从process Popen对象获取PID:

from selenium import webdriver
browser = webdriver.PhantomJS()
print browser.service.process.pid  

如果您使用的是PhantomJS,则可以从process Popen对象获取PID:

from selenium import webdriver
browser = webdriver.PhantomJS()
print browser.service.process.pid  

对于在这里寻找解决方案的人来说,这就是,希望它能帮助你

受保护整数getFirefoxPid(FirefoxBinary){
试一试{
最终字段fieldCmdProcess=FirefoxBinary.class.getDeclaredField(“进程”);
fieldCmdProcess.setAccessible(true);
最终对象ObjCmdProcess=fieldCmdProcess.get(二进制);
最终字段fieldInnerProcess=ObjCmdProcess.getClass().getDeclaredField(“流程”);
fieldInnerProcess.setAccessible(true);
最终对象objInnerProcess=fieldInnerProcess.get(ObjCmdProcess);
最终字段fieldWatchDog=objInnerProcess.getClass().getDeclaredField(“executeWatchdog”);
fieldWatchDog.setAccessible(真);
最终对象objWatchDog=fieldWatchDog.get(objInnerProcess);
最终字段fieldReelProcess=objWatchDog.getClass().getDeclaredField(“进程”);
fieldReelProcess.setAccessible(true);
最终进程进程=(进程)fieldReelProcess.get(objWatchDog);
最终整定pid;
if(Platform.getCurrent().is(WINDOWS)){
final字段f=process.getClass().getDeclaredField(“句柄”);
f、 setAccessible(true);
long hndl=f.getLong(过程);
final Kernel32 kernel=Kernel32.INSTANCE;
final WinNT.HANDLE HANDLE=新的WinNT.HANDLE();
setPointer(Pointer.createConstant(hndl));
pid=kernel.GetProcessId(句柄);
}否则{
最终字段f=process.getClass().getDeclaredField(“pid”);
f、 setAccessible(true);
pid=(整数)f.get(进程);
}
logger.info(“平台上的firefox进程id:+pid+”:+Platform.getCurrent());
返回pid;
}捕获(例外e){
e、 printStackTrace();
错误(“无法获取firefox进程id,异常为:{}”,e);
}
返回null;
}

对于在这里寻找解决方案的人来说,这里就是,希望它能帮助你

受保护整数getFirefoxPid(FirefoxBinary){
试一试{
最终字段fieldCmdProcess=FirefoxBinary.class.getDeclaredField(“进程”);
fieldCmdProcess.setAccessible(true);
最终对象ObjCmdProcess=fieldCmdProcess.get(二进制);
最终字段fieldInnerProcess=ObjCmdProcess.getClass().getDeclaredField(“流程”);
fieldInnerProcess.setAccessible(true);
最终对象objInnerProcess=fieldInnerProcess.get(ObjCmdProcess);
最终字段fieldWatchDog=objInnerProcess.getClass().getDeclaredField(“executeWatchdog”);
fieldWatchDog.setAccessible(真);
最终对象objWatchDog=fieldWatchDog.get(objInnerProcess);
最终字段fieldReelProcess=objWatchDog.getClass().getDeclaredField(“进程”);
fieldReelProcess.setAccessible(true);
最终进程进程=(进程)fieldReelProcess.get(objWatchDog);
最终整定pid;
if(Platform.getCurrent().is(WINDOWS)){
final字段f=process.getClass().getDeclaredField(“句柄”);
f、 setAccessible(true);
long hndl=f.getLong(过程);
final Kernel32 kernel=Kernel32.INSTANCE;
final WinNT.HANDLE HANDLE=新的WinNT.HANDLE();
setPointer(Pointer.createConstant(hndl));
pid=kernel.GetProcessId(句柄);
}否则{
最终字段f=process.getClass().getDeclaredField(“pid”);
f、 setAccessible(true);
pid=(整数)f.get(进程);
}
logger.info(“平台上的firefox进程id:+pid+”:+Platform.getCurrent());
返回pid;
}捕获(例外e){
e、 printStackTrace();
错误(“无法获取firefox进程id,异常为:{}”,e);
}
返回null;
}

如果您使用的是java和selenium,您只需首先找到JVM的PID,然后通过其子进程,您就可以得到chromedriver的PID,然后是chrome的PID。下面是一个查找chromedriver的PID的示例

    final String jvmName = ManagementFactory.getRuntimeMXBean().getName();
    final int index = jvmName.indexOf('@');
    if(index > 1) {
        try {
            String processId = Long.toString(Long.parseLong(jvmName.substring(0, index)));
            Scanner scan = new Scanner(Runtime.getRuntime().exec("wmic process where (ParentProcessId="+ processId +") get Caption,ProcessId").getInputStream());
            scan.useDelimiter("\\A");
            String childProcessIds =  scan.hasNext() ? scan.next() : "";
            List<String> chromeDrivers = new ArrayList<String>();
            String[] splited = childProcessIds.split("\\s+");
            for(int i =0 ; i<splited.length; i = i+2){
                if("chromedriver.exe".equalsIgnoreCase(splited[i])){
                    chromeDrivers.add(splited[i+1]);
                }
            }
            /*              
            *
            *Do whatever you want to do with the chromedriver's PID here    
            *
            * */        
            scan.close();
        } catch (Exception e) {

        }
    }
final字符串jvmName=ManagementFactory.getRuntimeMXBean().getName();
final int index=jvmName.indexOf('@');
如果(索引>1){
试一试{
字符串processId=Long.toString(Long.parseLong(jvmName.substring(0,索引));
Scanner scan=new Scanner(Runtime.getRuntime().exec(“wmic进程,其中(ParentProcessId=“+processId+”)获取标题,processId”).getInputStream();
scan.useDelimiter(\\A”);
字符串ChildProcessId=scan.hasNext()?scan.next():“”;
List chromeDrivers=new ArrayList();
String[]splited=childProcessIds.split(\\s+);

对于(int i=0;i如果您使用java和selenium,您可以简单地首先找到JVM的PID,然后通过其子进程,您可以获得chromedriver的PID,然后类似地获得chrome的PID。下面是一个查找chromedriver的PID的示例

    final String jvmName = ManagementFactory.getRuntimeMXBean().getName();
    final int index = jvmName.indexOf('@');
    if(index > 1) {
        try {
            String processId = Long.toString(Long.parseLong(jvmName.substring(0, index)));
            Scanner scan = new Scanner(Runtime.getRuntime().exec("wmic process where (ParentProcessId="+ processId +") get Caption,ProcessId").getInputStream());
            scan.useDelimiter("\\A");
            String childProcessIds =  scan.hasNext() ? scan.next() : "";
            List<String> chromeDrivers = new ArrayList<String>();
            String[] splited = childProcessIds.split("\\s+");
            for(int i =0 ; i<splited.length; i = i+2){
                if("chromedriver.exe".equalsIgnoreCase(splited[i])){
                    chromeDrivers.add(splited[i+1]);
                }
            }
            /*              
            *
            *Do whatever you want to do with the chromedriver's PID here    
            *
            * */        
            scan.close();
        } catch (Exception e) {

        }
    }
final字符串jvmName=ManagementFactory.getRuntimeMXBean().getName();
final int index=jvmName.indexOf('@');
如果(索引>1){
试一试{
字符串processId=Long.toString(Long.parseLong(jvmName.substring(0,索引));
Scanner scan=new Scanner(Runtime.getRuntime().exec(“wmic进程,其中(ParentProcessId=“+processId+”)获取标题,processId
wmic process get processid,parentprocessid,executablepath | find \"chrome.exe\" |find \"chromeDriverProcessID\"
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;

import org.apache.commons.lang.SystemUtils;
import org.openqa.selenium.WebDriverException;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeDriverService;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.logging.LogType;
import org.openqa.selenium.logging.LoggingPreferences;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;

public class WebdriverProcessID
{
  public static void main(String[] args) throws IOException, InterruptedException
  {
    ChromeDriver driver = null;

    ChromeOptions options = new ChromeOptions();
    List<String> listArguments = new ArrayList<String>();

    DesiredCapabilities cap = DesiredCapabilities.chrome();
    cap.setCapability(ChromeOptions.CAPABILITY, options);

    LoggingPreferences logPrefs = new LoggingPreferences();
    logPrefs.enable(LogType.PERFORMANCE, Level.ALL);
    cap.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);

    ChromeDriverService chromeDriverService = ChromeDriverService.createDefaultService();
    int port = chromeDriverService.getUrl().getPort();

    driver = new ChromeDriver(chromeDriverService, cap);

    System.out.println("starting chromedriver on port " + port);
    int chromeDriverProcessID = GetChromeDriverProcessID(port);
    System.out.println("detected chromedriver process id " + chromeDriverProcessID);
    System.out.println("detected chrome process id " + GetChromeProcesID(chromeDriverProcessID));

    driver.navigate().to("https://www.test.com/");

    try
    {
      Thread.sleep(100000);
    }
    catch (InterruptedException e)
    {
    }

    try
    {
      driver.close();
    }
    catch (WebDriverException ex)
    {
      ex.printStackTrace();
    }

    try
    {
      driver.quit();
    }
    catch (WebDriverException ex)
    {
      ex.printStackTrace();
    }
  }

  private static int GetChromeDriverProcessID(int aPort) throws IOException, InterruptedException
  {
    String[] commandArray = new String[3];

    if (SystemUtils.IS_OS_LINUX)
    {
      commandArray[0] = "/bin/sh";
      commandArray[1] = "-c";
      commandArray[2] = "netstat -anp | grep LISTEN | grep " + aPort;
    }
    else if (SystemUtils.IS_OS_WINDOWS)
    {
      commandArray[0] = "cmd";
      commandArray[1] = "/c";
      commandArray[2] = "netstat -aon | findstr LISTENING | findstr " + aPort;
    }
    else
    {
      System.out.println("platform not supported");
      System.exit(-1);
    }

    System.out.println("running command " + commandArray[2]);

    Process p = Runtime.getRuntime().exec(commandArray);
    p.waitFor();

    BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));

    StringBuilder sb = new StringBuilder();
    String line = "";
    while ((line = reader.readLine()) != null)
    {
      sb.append(line + "\n");
    }

    String result = sb.toString().trim();

    System.out.println("parse command response line:");
    System.out.println(result);

    return SystemUtils.IS_OS_LINUX ? ParseChromeDriverLinux(result) : ParseChromeDriverWindows(result);
  }

  private static int GetChromeProcesID(int chromeDriverProcessID) throws IOException, InterruptedException
  {
    String[] commandArray = new String[3];

    if (SystemUtils.IS_OS_LINUX)
    {
      commandArray[0] = "/bin/sh";
      commandArray[1] = "-c";
      commandArray[2] = "ps -efj | grep google-chrome | grep " + chromeDriverProcessID;
    }
    else if (SystemUtils.IS_OS_WINDOWS)
    {
      commandArray[0] = "cmd";
      commandArray[1] = "/c";
      commandArray[2] = "wmic process get processid,parentprocessid,executablepath | find \"chrome.exe\" |find \"" + chromeDriverProcessID + "\"";
    }
    else
    {
      System.out.println("platform not supported");
      System.exit(-1);
    }

    System.out.println("running command " + commandArray[2]);

    Process p = Runtime.getRuntime().exec(commandArray);
    p.waitFor();

    BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));

    StringBuilder sb = new StringBuilder();
    String line = "";
    while ((line = reader.readLine()) != null)
    {
      if (SystemUtils.IS_OS_LINUX && line.contains("/bin/sh"))
      {
        continue;
      }

      sb.append(line + "\n");
    }

    String result = sb.toString().trim();

    System.out.println("parse command response line:");
    System.out.println(result);

    return SystemUtils.IS_OS_LINUX ? ParseChromeLinux(result) : ParseChromeWindows(result);
  }

  private static int ParseChromeLinux(String result)
  {
    String[] pieces = result.split("\\s+");
    // root 20780 20772 20759 15980  9 11:04 pts/1    00:00:00 /opt/google/chrome/google-chrome.........
    // the second one is the chrome process id
    return Integer.parseInt(pieces[1]);
  }

  private static int ParseChromeWindows(String result)
  {
    String[] pieces = result.split("\\s+");
    // C:\Program Files (x86)\Google\Chrome\Application\chrome.exe 14304 19960
    return Integer.parseInt(pieces[pieces.length - 1]);
  }

  private static int ParseChromeDriverLinux(String netstatResult)
  {
    String[] pieces = netstatResult.split("\\s+");
    String last = pieces[pieces.length - 1];
    // tcp 0 0 127.0.0.1:2391 0.0.0.0:* LISTEN 3333/chromedriver
    return Integer.parseInt(last.substring(0, last.indexOf('/')));
  }

  private static int ParseChromeDriverWindows(String netstatResult)
  {
    String[] pieces = netstatResult.split("\\s+");
    // TCP 127.0.0.1:26599 0.0.0.0:0 LISTENING 22828
    return Integer.parseInt(pieces[pieces.length - 1]);
  }
}
starting chromedriver on port 17132
running command netstat -anp | grep LISTEN | grep 17132
parse command response line:
tcp        0      0 127.0.0.1:17132         0.0.0.0:*               LISTEN      22197/chromedriver
detected chromedriver process id 22197
running command ps -efj | grep google-chrome | grep 22197
parse command response line:
root     22204 22197 22183 15980 26 11:17 pts/1    00:00:00 /opt/google/chrome/google-chrome ...
detected chrome process id 22204
starting chromedriver on port 34231
running command netstat -aon | findstr LISTENING | findstr 34231
parse command response line:
TCP    127.0.0.1:34231        0.0.0.0:0              LISTENING       10692
detected chromedriver process id 10692
running command wmic process get "processid,parentprocessid,executablepath" | findstr "chrome.exe" | findstr "10692"
parse command response line:
C:\Program Files (x86)\Google\Chrome\Application\chrome.exe  10692 12264
detected chrome process id 12264
from selenium import webdriver
driver = webdriver.Firefox()
print(driver.service.process.pid)
import psutil

# Get pid of geckodriver
webdriver_pid = driver.service.process.pid

# Get the process of geckodriver
process = psutil.Process(webdriver_pid)

# Get memory of geckodriver + firefox
# Since memory is in bytes divide by 1024*1024 to obtain result in MB
total_memory = sum([x.memory_info().rss/1048576 for x in process.children() + [process]])
from selenium import webdriver
from selenium.webdriver.firefox.options import Options

options = Options()
options.binary_location = r'C:\Program Files\Firefox Nightly\firefox.exe'
driver = webdriver.Firefox(firefox_options=options, executable_path=r'C:\WebDrivers\geckodriver.exe')
my_dict = driver.capabilities
print("PID of the browser process is: " + str(my_dict['moz:processID']))
PID of the browser process is: 14240
from selenium import webdriver
from contextlib import suppress
import psutil

driver = webdriver.Chrome(executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
driver.get('https://www.google.com/')
for process in psutil.process_iter():
    if process.name() == 'chrome.exe' and '--test-type=webdriver' in process.cmdline():
    with suppress(psutil.NoSuchProcess):
        print(process.pid)
1164
1724
4380
5748        
public static IntPtr CurrentBrowserHwnd = IntPtr.Zero;
public static int CurrentBrowserPID = -1;
        
ChromeOptions options = new ChromeOptions();
options.AddArgument("scriptpid-" + System.Diagnostics.Process.GetCurrentProcess().Id);
IWebDriver driver = new ChromeDriver(options);

// Get the PID and HWND details for a chrome browser

System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcessesByName("chrome");
for (int p = 0; p < processes.Length; p++)
{
    ManagementObjectSearcher commandLineSearcher = new ManagementObjectSearcher("SELECT CommandLine FROM Win32_Process WHERE ProcessId = " + processes[p].Id);
    String commandLine = "";
    foreach (ManagementObject commandLineObject in commandLineSearcher.Get())
    {
        commandLine += (String)commandLineObject["CommandLine"];
    }

    String script_pid_str = (new Regex("--scriptpid-(.+?) ")).Match(commandLine).Groups[1].Value;

    if (!script_pid_str.Equals("") && Convert.ToInt32(script_pid_str).Equals(System.Diagnostics.Process.GetCurrentProcess().Id))
    {
        CurrentBrowserPID = processes[p].Id;
        CurrentBrowserHwnd = processes[p].MainWindowHandle;
        break;
    }
}