有谁知道如何从运行WebDriver的Ruby脚本中获取Selenium WebDriver启动的浏览器的进程ID?
答案 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
希望它有所帮助!