提取Selenium WebDriver在Ruby中启动的浏览器的pid



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

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
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

这两个答案对我都不起作用,因为这是私有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中,我们可以传递自定义属性。我像这个一样使用它

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

因此,您可以grep并杀死浏览器进程和geckodriver。执行

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

希望它能有所帮助!

最新更新