Отслеживайте посещаемые веб-сайты с помощью Internet Explorer, Opera, Chrome, Firefox и Safari на Python.

Я работаю над проектом для работы и, похоже, столкнулся с небольшой проблемой. Этот проект похож на программу «Веб-няня», но предназначен для компании моего клиента. Он будет иметь такие функции, как блокировка веб-сайтов по URL-адресу, ключевым словам и журналам веб-активности. Мне также нужно, чтобы он мог «приостанавливать» загрузку до тех пор, пока не будут введены приемлемое имя пользователя и пароль.

Я нашел сценарий для отслеживания URL-адреса, посещенного в Internet Explorer (показан ниже), но, похоже, он значительно замедляет работу браузера. Я не нашел никакой поддержки или идей о том, как реализовать это в других браузерах.

Итак, мои вопросы:

1). Как отслеживать другие действия в браузере/посещенные URL-адреса? 2). Как предотвратить загрузку, если не будут введены допустимые имя пользователя и пароль?


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

person Zac Brown    schedule 08.06.2010    source источник


Ответы (2)


Я бы порекомендовал изучить хороший веб-прокси. Если все машины находятся в одной сети, вы можете реализовать прозрачный кэширующий веб-прокси и применить к нему правила фильтрации. Они, как правило, обладают высокой скоростью и могут делать много классных вещей.

Мне повезло со Squid. Это решит вашу ситуацию?

person TheJacobTaylor    schedule 08.06.2010
comment
На самом деле, я использую squid в своей домашней сети. Но мне нужна какая-то защита, написанная на Python, которую можно установить на каждую отдельную машину. Магазин моего клиента занимается ремонтом компьютеров, поэтому, когда система будет исправлена, они добавят программное обеспечение в качестве дополнительного. Спасибо за быстрый ответ. Спасибо за быстрый ответ. - person Zac Brown; 08.06.2010
comment
В этом случае я бы рекомендовал изучить программное обеспечение, которое защищает всю машину в сети. Существует множество пакетов, одним из которых является Norton Internet Security. Я уверен, что есть и версии с открытым исходным кодом. Браузеры легко заменить (удалив плагин). Настройка сети обычно немного сложнее. - person TheJacobTaylor; 08.06.2010
comment
Я думаю, что веб-прокси может быть просто ключом к тому, что я хочу. Как мне построить его на Python? Я бы использовал его для блокировки URL и ключевых слов. Затем я бы написал клиент, который не ставится на компьютер, который проверяет каждые несколько секунд, чтобы убедиться, что браузер настроен на использование прокси. Если это не так, он устанавливает это! Это также кажется довольно простым способом ведения дел. Как бы я сделал это в Python? Знаете какие-нибудь хорошие учебники по созданию веб-прокси? - person Zac Brown; 08.06.2010
comment
Яков, спасибо за прекрасную идею! Извините, что мне потребовалось так много времени, чтобы сказать это, но прокси был именно тем, что мне было нужно. Я закодировал один другой ночью и модифицировал его для работы с моим программным обеспечением, чтобы обеспечить наилучшую возможную защиту! Спасибо еще раз! - person Zac Brown; 31.07.2010
comment
@ Zachary Brown Отлично, я рад, что у тебя все получилось. - person TheJacobTaylor; 04.08.2010

Вам необходимо реализовать это как C++ BHO, приемник DWebBrowserEvents2::OnBeforeNavigate и реализуйте там свою логику, так как это место, которое синхронно блокирует навигацию, пока вы не вернетесь, и вы можете отменить там же и навигация.

person i_am_jorf    schedule 08.06.2010
comment
Извините, но этот ответ не показался мне ясным. :( Не могли бы вы немного объяснить? Спасибо за быстрый ответ. - person Zac Brown; 08.06.2010
comment
Я хочу сказать, что то, как ты это делаешь, не так, как это должно быть сделано. Если вы хотите сделать это правильно, быстро, вам нужно реализовать вспомогательный объект браузера на C++ и использовать соответствующие интерфейсы диспетчеризации событий COM. Я отредактирую свой ответ и добавлю ссылки на документацию для вас. Кстати, сделать это таким образом будет нелегко или тривиально. - person i_am_jorf; 08.06.2010
comment
Хорошо спасибо. Я это проверю. Я надеялся, что есть способ сделать это на чистом Python, возможно ли это? Я не знаю С++, поэтому думаю, что это будет очень сложно. Хотя ссылки посмотрю. Спасибо! - person Zac Brown; 08.06.2010