python - 如何在 Python 中跟踪 Chrome 选项卡的 PID?

标签 python linux google-chrome

我正在开发一个需要我跟踪特定 Chrome/浏览器实例的 PID 的程序。这是我为此编写的代码:

def launch_procs():
    low1 = Popen(['google-chrome-stable', 'http://www.google.com'])
    med1 = Popen(['google-chrome-stable', 'http://www.netflix.com'])
    high1 = Popen(['google-chrome-stable', 'http://www.facebook.com'])
    return [low1.pid, med1.pid, high1.pid]

但是,当我稍后尝试在程序中引用 PID 时,PID 似乎已过期。这是我得到的错误:

7894
strace: attach: ptrace(PTRACE_ATTACH, ...): No such process
7896
strace: attach: ptrace(PTRACE_ATTACH, ...): No such process
7901
strace: attach: ptrace(PTRACE_ATTACH, ...): No such process

问题是 Chrome 没有为其选项卡/进程分配永久 PID(即,一旦 Chrome 进程启动并放弃父进程,它就会 fork )吗?

注意:此实现与浏览器/实现无关,我只需要一种方法来稳定访问这些已启动进程的 PID。如果有人对此有任何建议,我们将不胜感激。

谢谢!

最佳答案

Chrome 在正常操作条件下不会以 root 身份运行。您可以找到关于此的几个讨论 herehere

有几个参数可以让您规避这一点。通过传递 --user-data-dir--no-sandbox,您将能够以 root 身份运行 chrome。

import os
from subprocess import Popen


line_count = 10
outfile = 'foo.txt'
cmd = 'sudo timeout 10 strace -p {} -o temp.out | cat temp.out | tail -{} > {}'
tab_sites = ['www.google.com', 'www.yahoo.com', 'www.msn.com']


for site in tab_sites:
    chrome_proc = Popen(['google-chrome-stable', site, '--user-data-dir', '--no-sandbox']) 
    print(chrome_proc.pid)
    os.system(cmd.format(chrome_proc.pid, line_count, outfile))

或者您可以使用 runuser用你的命令:

import os
import sys
from subprocess import Popen


line_count = 10
outfile = 'foo.txt'
cmd = 'sudo timeout 10 strace -p {} -o temp.out | cat temp.out | tail -{} > {}'
tab_sites = ['www.google.com', 'www.yahoo.com', 'www.msn.com']


for site in tab_sites:
    chrome_proc = Popen(['runuser', '-u', sys.argv[1], 'google-chrome-stable', site]) 
    print(chrome_proc.pid)
    os.system(cmd.format(chrome_proc.pid, line_count, outfile))

只需传入您要在其下运行的用户名,sudo python trace_chrome.py your_user_name

我知道您无法显示您的确切代码,这确实让事情变得更难提供帮助。

关于python - 如何在 Python 中跟踪 Chrome 选项卡的 PID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40965320/

相关文章:

python - 同时创建父级时如何将外键传递给序列化程序?

python - 应用特定函数根据数据框中另一列的条件替换列的值

linux - nasm 文件缓冲区的第二个和第三个元素始终为 0

java - org.apache.commons.net.ftp.parser.ParserInitializationException : Unknown parser type: Linux

javascript - 重新启用 javascript 对话框

javascript - 未捕获的类型错误 : Cannot read property 'message' of undefined

python - 来自 python-osc 客户端的 OSC 消息未被 ChucK 服务器接收

Python:SettingWithCopyWarning:试图在 DataFrame 的切片副本上设置一个值

linux - 在新行上打印 awk 结果

css - 如何在 Chrome 中调试 LESS?