2010-06-08 2 views
1

Je travaille sur un projet de travail et j'ai semblé rencontrer un petit problème. Le projet est un programme similaire à Web Nanny, mais marqué à l'entreprise de mon client. Il aura des fonctionnalités telles que le blocage de site Web par URL, mot-clé et les journaux d'activité Web. J'aurais aussi besoin d'être en mesure de «mettre en pause» les téléchargements jusqu'à ce qu'un nom d'utilisateur et un mot de passe acceptables soient entrés.Surveiller les sites Web visités en utilisant Internet Explorer, Opera, Chrome, Firefox et Safari en Python

J'ai trouvé un script pour surveiller l'URL visitée dans Internet Explorer (voir ci-dessous), mais il semble ralentir considérablement le navigateur. Je n'ai trouvé aucun support ou idée sur la façon de l'implémenter dans d'autres navigateurs. Donc, mes questions sont:

1). Comment surveiller les autres activités du navigateur/les URL visitées? 2). Comment puis-je empêcher le téléchargement à moins d'entrer un nom d'utilisateur et un mot de passe acceptables?


from win32com.client import Dispatch,WithEvents 
import time,threading,pythoncom,sys 

stopEvent=threading.Event() 
class EventSink(object): 

    def OnNavigateComplete2(self,*args): 
     print "complete",args 
     stopEvent.set() 


def waitUntilReady(ie): 
    if ie.ReadyState!=4: 
     while 1: 
      print "waiting" 
      pythoncom.PumpWaitingMessages() 
      stopEvent.wait(.2) 
      if stopEvent.isSet() or ie.ReadyState==4: 
       stopEvent.clear() 
       break; 

time.clock() 
ie=Dispatch('InternetExplorer.Application',EventSink) 
ev=WithEvents(ie,EventSink) 
ie.Visible=1 
ie.Navigate("http://www.google.com") 

waitUntilReady(ie) 
print "location",ie.LocationName 
ie.Navigate("http://www.aol.com") 
waitUntilReady(ie) 
print "location",ie.LocationName 
print ie.LocationName,time.clock() 
print ie.ReadyState 

Répondre

2

Je vous conseille de regarder dans une belle proxy web. Si les machines sont toutes sur le même réseau, vous pouvez implémenter un proxy web de cache transparent et y appliquer des règles de filtrage. Ils ont tendance à être à grande vitesse et peuvent faire beaucoup de choses cool.

J'ai eu de la chance avec Squid.

Est-ce que cela pourrait résoudre votre situation?

Jacob

+0

En fait, j'utilise calmar sur mon réseau domestique. Mais, ce dont j'ai besoin, c'est d'une sorte de protection, écrite en Python, qui peut être installée sur chaque machine individuelle. Le magasin de mon client est un atelier de réparation d'ordinateurs, donc quand le système est réparé, il ajoute le logiciel en plus. Nous vous remercions de votre réponse rapide. Nous vous remercions de votre réponse rapide. –

+0

Dans ce cas, je recommande de regarder dans un logiciel qui protège l'ensemble de la machine sur le réseau. Norton Internet Security en est un. Je suis sûr qu'il existe également des versions open source. Les navigateurs sont faciles à remplacer (en supprimant votre plugin). La configuration du réseau est généralement un peu plus difficile. – TheJacobTaylor

+0

Je pense qu'un proxy web pourrait bien être la clé de ce que je veux. Comment pourrais-je construire un en Python? Je l'utiliserais pour l'URL et le blocage des mots clés. Ensuite, j'écrirais un client sur l'ordinateur qui vérifie toutes les quelques secondes pour s'assurer que le navigateur est configuré pour utiliser un proxy. Si ce n'est pas le cas, ça règle ça! Cela semble être une façon assez facile de faire les choses aussi. Comment ferais-je cela en Python? Connaissez-vous de bons tutoriels pour créer des proxys Web? –

0

Vous devez mettre en œuvre cela comme un BHO, évier DWebBrowserEvents2 :: OnBeforeNavigate et mettre en œuvre il y a votre logique car il est un endroit qui bloque Navigate synchrone jusqu'à ce que vous revenez et vous pouvez annuler la navigation là aussi.

+0

Je suis désolé, mais cette réponse ne me semblait pas claire. : (Pourriez-vous s'il vous plaît expliquer un peu? Merci pour la réponse rapide –

+0

Ce que je dis, c'est que la façon dont vous le faites n'est pas la façon dont il est fait pour être fait.Si vous voulez le faire de la bonne façon , d'une manière qui sera rapide, vous devez implémenter un objet d'aide au navigateur en C++ et utiliser les interfaces d'envoi d'événements COM appropriées.Je vais modifier ma réponse et ajouter des liens vers la documentation pour vous. Ce ne sera pas facile ou trivial de le faire de cette façon, d'ailleurs. –

+0

OK, merci. Je vais vérifier cela. J'espérais qu'il y avait un moyen de le faire en pur Python, est-ce possible? Je ne connais pas le C++, donc je pense que ce sera très difficile. Je vais vérifier les liens si. Merci! –

Questions connexes