使用Python监控访问Internet Explorer、Opera、Chrome、Firefox和Safari的网站
我正在为工作做一个项目,遇到了一点小问题。这个项目是一个类似于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,效果还不错。这样能解决你的问题吗?