有人知道如何从运行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
希望它能有所帮助!