Seite 1 von 1

Abfragen welcher Browser offen ist

Verfasst: Freitag 14. März 2014, 12:23
von Eng1996
Guten Tag,
gibt es in Python ein Modul/Funktion welches herausfindet welcher Browser gerade offen ist?
Also im Grunde einfach den Namen zurückgibt: z.B Chrome, Firefox oder Internet Explorer.
Am liebsten dann noch die URLs von den Tabs die gerade offen sind.

Re: Abfragen welcher Browser offen ist

Verfasst: Freitag 14. März 2014, 13:09
von darktrym
Mit psutil.process_iter() kommt man an einer Liste aktiver Prozesse, k.A. wie man da auf die URL kommt.

Re: Abfragen welcher Browser offen ist

Verfasst: Freitag 14. März 2014, 13:12
von /me
Eng1996 hat geschrieben:gibt es in Python ein Modul/Funktion welches herausfindet welcher Browser gerade offen ist?
Nicht mit einer speziell dafür vorgesehenen magischen Funktion. Python ist weder speziell für bestimmte externe Programme, noch für spezielle Betriebssysteme gebaut.

Vielleicht können wir dir konkretere Ansatzpunkte liefern wenn du uns sagst, ob du bei den Betriebssystemen eine bestimmte Einschränkung vornehmen kannst.

Re: Abfragen welcher Browser offen ist

Verfasst: Freitag 14. März 2014, 13:16
von /me
darktrym hat geschrieben:Mit psutil.process_iter() kommt man an einer Liste aktiver Prozesse, k.A. wie man da auf die URL kommt.
Netterweise sollte man noch erwähnen, dass psutil nicht in der Standardbibliothek vorhanden ist. Du kannst aber psutil im Python Package Index (pypi) finden.

Re: Abfragen welcher Browser offen ist

Verfasst: Freitag 14. März 2014, 13:24
von Eng1996
/me hat geschrieben:Vielleicht können wir dir konkretere Ansatzpunkte liefern wenn du uns sagst, ob du bei den Betriebssystemen eine bestimmte Einschränkung vornehmen kannst.
Was meinst du konkret damit? Wir benutzen hier Windows als angepasstes Image, nur leider wurde vergessen einen "Browserlook" einzubinden so das nur ein Browser verwendet werden darf. Jetzt habe ich die Aufgabe bekommen diesen im Nachhinein selber zu schreiben. Wie ich in auf knapp 1000 Rechner bekomme? Wir haben hier in der It ein Tool mit dem wir auf jedes Verzeichnis auf den Rechnern der Verwaltung zugreifen können und über eine Schnittelle kann man mit ein paar Klicks Programme und Scripts installieren.


Gut dann schau ich mir erstmal process_iter() an. Danke für den Tipp.

Re: Abfragen welcher Browser offen ist

Verfasst: Freitag 14. März 2014, 13:47
von Sirius3
@Eng1996: welche Programme ausgeführt werden dürfen, kann man soweit ich weiß in den Windows Komponenten Richtlinien festlegen. Jede andere Methode, vor allem irgendwelches selbstgeschriebene Zeug, läßt sich mit einfachsten Mitteln aushebeln.

Re: Abfragen welcher Browser offen ist

Verfasst: Freitag 14. März 2014, 14:40
von /me
Eng1996 hat geschrieben:Gut dann schau ich mir erstmal process_iter() an.
Alle Konsolen abmurksen.

Code: Alles auswählen

import psutil

def main():
    consoles = [p for p in psutil.process_iter() if p.as_dict(attrs=['name'])['name'] == 'cmd.exe']
    for proc in consoles:
        proc.kill()

if __name__ == '__main__':
    main()

Re: Abfragen welcher Browser offen ist

Verfasst: Freitag 14. März 2014, 15:06
von BlackJack
@/me: Gibt es einen Grund für die komplizierte ``if``-Bedingung? Warum nicht einfach ``p.name == 'cmd.exe'``?

Re: Abfragen welcher Browser offen ist

Verfasst: Freitag 14. März 2014, 15:46
von /me
BlackJack hat geschrieben:@/me: Gibt es einen Grund für die komplizierte ``if``-Bedingung? Warum nicht einfach ``p.name == 'cmd.exe'``?
Zumindest bei mir verhält sich das nicht so wie erwartet.

Code: Alles auswählen

    for proc in psutil.process_iter():
        print(proc.name)

Code: Alles auswählen

<bound method Process.name of <psutil.Process(pid=0, name='System Idle Process') at 33128048>>
<bound method Process.name of <psutil.Process(pid=4, name='System') at 33128112>>
<bound method Process.name of <psutil.Process(pid=128) at 33128240>>
<bound method Process.name of <psutil.Process(pid=348) at 33128208>>
[...]
Alternativ mit name als Methodenaufruf.

Code: Alles auswählen

    for proc in psutil.process_iter():
        print(proc.name())

Code: Alles auswählen

System Idle Process
System
Traceback (most recent call last):
  File "C:/pyjects/test/libraries/psutil_/r1.py", line 39, in <module>
    main()
  File "C:/pyjects/test/libraries/psutil_/r1.py", line 27, in main
    print(proc.name())
  File "C:\Python27\lib\site-packages\psutil\__init__.py", line 490, in name
    name = self._proc.name()
  File "C:\Python27\lib\site-packages\psutil\_pswindows.py", line 185, in wrapper
    return fun(self, *args, **kwargs)
  File "C:\Python27\lib\site-packages\psutil\_pswindows.py", line 220, in name
    return os.path.basename(self.exe())
  File "C:\Python27\lib\site-packages\psutil\_pswindows.py", line 192, in wrapper
    raise AccessDenied(self.pid, self._name)
psutil.AccessDenied: (pid=128)
Das unhandliche Gefummel in meinem Beispielcode scheint das Problem zu umgehen.

Re: Abfragen welcher Browser offen ist

Verfasst: Freitag 14. März 2014, 16:05
von BlackJack
@/me: Das `name()` jetzt eine Methode ist scheint mit `psutil` 2.0 so zu sein. Und das mit der Zugriffsausnahme ist mir unter Linux noch nie passiert, das scheint eine Windows-Eigenschaft zu sein.