使用Python监控访问Internet Explorer、Opera、Chrome、Firefox和Safari的网站

2 投票
2 回答
3075 浏览
提问于 2025-04-15 23:41

我正在为工作做一个项目,遇到了一点小问题。这个项目是一个类似于Web Nanny的程序,不过是为我的客户公司定制的。它会有一些功能,比如通过网址来屏蔽网站、关键词过滤和网络活动日志。我还需要它能够“暂停”下载,直到输入一个合适的用户名和密码。

我找到了一段脚本,可以监控在Internet Explorer中访问的网址(见下文),但似乎会让浏览器变得很慢。我没有找到任何支持或想法,关于如何在其他浏览器中实现这个功能。

所以,我的问题是:

1). 我该如何监控其他浏览器的活动/访问的网址?

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

2 个回答

0

你需要把这个实现成一个 C++BHO,也就是浏览器帮助对象。你要关注 DWebBrowserEvents2 里面的 OnBeforeNavigate 这个事件。在这里你可以写你的逻辑,因为这个地方会在导航开始之前阻止浏览器继续前进,直到你返回结果。而且你也可以在这里取消导航。

2

我建议你可以看看一个不错的网络代理。如果这些机器都在同一个网络上,你可以设置一个透明的缓存网络代理,并在上面加一些过滤规则。这样的代理通常速度很快,还能做很多有趣的事情。

我用过Squid,效果还不错。这样能解决你的问题吗?

撰写回答