Извлечь pid браузера, запущенного Selenium WebDriver в Ruby - PullRequest
4 голосов
/ 28 января 2012

Кто-нибудь знает, как получить идентификатор процесса браузера, запущенного Selenium WebDriver, из сценария Ruby, запускающего WebDriver?

Ответы [ 3 ]

5 голосов
/ 07 февраля 2013

Ответ Бена у меня не сработал, мне пришлось настроить его следующим образом:

driver = Selenium::WebDriver.for :chrome

bridge = driver.instance_variable_get(:@bridge)
service = bridge.instance_variable_get(:@service)
process = service.instance_variable_get(:@process)
process.pid
# => 22656
2 голосов
/ 13 февраля 2018

Оба ответа у меня не сработали, потому что это часть приватного API.
Оформить заказ на github

require "selenium-webdriver" # gem 3.9.0

driver = Selenium::WebDriver.for :firefox
pid    = driver.instance_variable_get(:@service)
               .instance_variable_get(:@process)
               .instance_variable_get(:@pid)




Примечание:

Для тех, кто пытается получить доступ к браузеру с помощью pid, например, выполнить команду kill -9 $pid. Возможно, это неправильно, потому что я нашел лучшее решение.

В аргументах команды мы можем передавать пользовательские атрибуты. Я использую это так

@buid   = SecureRandom.hex[0..15] # browser unique identifier
options = Selenium::WebDriver::Firefox::Options.new(
  args: [
    '-headless',
    "-buid=#{@buid}",
  ]
)

Итак, вы можете использовать grep и kill и процесс браузера, и geckodriver. По exec

$ps aux | awk '/-buid=$generated_pid/ {print $2}' | xargs kill -9

Надеюсь, это поможет!

2 голосов
/ 18 февраля 2012
require "selenium-webdriver"

driver = Selenium::WebDriver.for :firefox

bridge = driver.instance_variable_get(:@bridge)
launcher = bridge.instance_variable_get(:@launcher)
binary = launcher.instance_variable_get(:@binary)
process = binary.instance_variable_get(:@process)
process.pid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...