Я хотел бы получить PID браузера, запущенного селеном. Есть ли способ сделать это?Получить PID браузера, запущенного selenium
ответ
Нет, что я знаю. Получение PID обычно требует некоторой модификации кода Selenium. Однако вы можете получить ПИД из системы, а не от самого Селена. Эта тема на WebDriver группы пользователей могут быть полезны:
https://groups.google.com/forum/#!topic/webdriver/_-8Slyn6qrI
Используя API Python, это довольно просто:
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)
Вы не знаете, как получить его с помощью nodejs? – k102
Я этого не делаю. Я нашел его, копаясь через источник, в модуле под названием 'selenium.webdriver.firefox'. Может быть, копаться через источник js? Где-то здесь? http://code.google.com/p/selenium/source/browse/javascript/firefox-driver/js/firefoxDriver.js – hwjp
Это не работает, если вы используете PhantomJS. Драйвер не имеет двоичного атрибута. – ABM
Если вы используете PhantomJS, то вы можете получить PID из технологического объекта POPEN:
from selenium import webdriver
browser = webdriver.PhantomJS()
print browser.service.process.pid
для парней, отправляющихся сюда, чтобы найти решение, вот оно, надеюсь, оно вам поможет.
protected Integer getFirefoxPid(FirefoxBinary binary){
try {
final Field fieldCmdProcess = FirefoxBinary.class.getDeclaredField("process");
fieldCmdProcess.setAccessible(true);
final Object ObjCmdProcess = fieldCmdProcess.get(binary);
final Field fieldInnerProcess = ObjCmdProcess.getClass().getDeclaredField("process");
fieldInnerProcess.setAccessible(true);
final Object objInnerProcess = fieldInnerProcess.get(ObjCmdProcess);
final Field fieldWatchDog = objInnerProcess.getClass().getDeclaredField("executeWatchdog");
fieldWatchDog.setAccessible(true);
final Object objWatchDog = fieldWatchDog.get(objInnerProcess);
final Field fieldReelProcess = objWatchDog.getClass().getDeclaredField("process");
fieldReelProcess.setAccessible(true);
final Process process = (Process) fieldReelProcess.get(objWatchDog);
final Integer pid;
if (Platform.getCurrent().is(WINDOWS)) {
final Field f = process.getClass().getDeclaredField("handle");
f.setAccessible(true);
long hndl = f.getLong(process);
final Kernel32 kernel = Kernel32.INSTANCE;
final WinNT.HANDLE handle = new WinNT.HANDLE();
handle.setPointer(Pointer.createConstant(hndl));
pid = kernel.GetProcessId(handle);
} else {
final Field f = process.getClass().getDeclaredField("pid");
f.setAccessible(true);
pid = (Integer) f.get(process);
}
logger.info("firefox process id : " + pid + " on plateform : " + Platform.getCurrent());
return pid;
} catch (Exception e) {
e.printStackTrace();
logger.error("Cannot get firefox process id, exception is : {}", e);
}
return null;
}
Если вы используете Java и селен, вы можете просто сначала найти PID из виртуальной машины Java, а затем через его дочерние процессы, вы можете получить PID из chromedriver, а затем аналогичным образом PID хрома. Вот пример, чтобы найти 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) {
}
}
- 1. Получить PID браузера, начатого Selenium (в java)
- 2. Получить pid запущенного процесса C++
- 3. Найти PID процесса браузера запущен Selenium WebDriver
- 4. Получить pid последнего запущенного экземпляра определенного процесса
- 5. Как получить PID запущенного приложения в C#
- 6. Дифференцирование браузера Chrome, запущенного драйвером Selenium chrome из браузера Chrome, запущенного вручную.
- 7. PID внешнего процесса, запущенного в PHP
- 8. Bash/ps: получить pid запущенного «myscript.sh» дочернего процесса определенного процесса
- 9. Получить pid из подпроцесса java, запущенного с помощью xvfb-run
- 10. Как получить pid запущенного менеджера в многопроцессорной обработке python
- 11. Самый простой способ получить PID недавно запущенного приложения
- 12. Захват PID фонового процесса, запущенного Makefile
- 13. Selenium получить последнее окно браузера
- 14. получить правильный PID интернет-исследователя
- 15. Get PID длительного запущенного процесса начался в Баш скрипт
- 16. Получение pid задания, запущенного в фоновом режиме удаленно
- 17. Как получить контроль над окном браузера веб-браузера selenium
- 18. Сохранение браузера Selenium active
- 19. Автоматизация браузера IE, запущенного с использованием Citrix
- 20. получить pid процесса в подпроцессе python + bash
- 21. Как сделать edeliver write pid запущенного сервера phoenix?
- 22. Selenium сохранение истории браузера
- 23. Размер окна браузера Selenium
- 24. Профиль браузера в selenium
- 25. Получить простую форму для запущенного приложения
- 26. Получить путь к каталогу запущенного процесса ID
- 27. Selenium: Webdriver: Есть ли прослушиватель для захвата действий пользователя в сеансе браузера, запущенного WebDriver?
- 28. Плагины браузера для браузера с Selenium
- 29. Получить имя процесса pid
- 30. Получить PID себя (супервизор)
Если есть параллельные тесты, исполняющие, несколько экземпляров браузера, мы не могли соответствовать выбранному процессу с соответствующей селеном идентификатор сеанса –