在Ruby中提取由Selenium WebDriver发布的浏览器的pid

时间:2012-01-27 22:35:25

标签: ruby selenium

有谁知道如何从运行WebDriver的Ruby脚本中获取Selenium WebDriver启动的浏览器的进程ID?

3 个答案:

答案 0 :(得分:5)

Ben的答案对我不起作用,我必须将其调整为以下内容:

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

这两个答案对我都不起作用,因为这是私人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命令。这可能是错的,因为我遇到了更好的解决方案。

在命令args中,我们可以传递自定义的attrs。 我像这样使用它

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

那么你可以grep并杀死浏览器进程和geckodriver。 由exec

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

希望它有所帮助!