redapple2008 发表于 2011-10-14 15:45:55

收藏,学了,感谢!

superflq 发表于 2011-10-14 23:03:34

~~~~{:face (332):}各位大大呢~~

半芯蕃茄 发表于 2011-10-15 06:54:25

大大们不可能没招啊。。。。

superflq 发表于 2011-10-15 20:11:52

每天都来关注下

lynfr8 发表于 2011-10-16 04:04:05

本帖最后由 lynfr8 于 2011-10-16 04:19 编辑

暂时只能用这种方法处理内嵌网页的广告
AU3应该是可以做到类似opera在网页加载完毕显示前进行内容拦截的
不过要非常熟悉网页事件和IE消息钩子
例子是读取已经显示的网页源码进行修改
当网页发生点击事件可以检测到再重新进行源码替换
但这种方法无疑不是高效的
更佳解决思路应该是:
1.检测到网页点击跳转事件
2.拦截IE下载内容进行分析
3.发现目标广告链接(包括js、图片、声音、swf等)则“欺骗”IE已下载完毕
本人不才能力有限只能抛砖引玉了
有兴趣可以借鉴下此文的拦截机制
《广告屏蔽软件开发技术方案》(计算机文献,写得非常好!几经艰难搜索所得,象征性收1大洋,呵呵...)

免费再送一文:
《C中使用BHO来屏蔽特定网站》
#include <ButtonConstants.au3>
#include <WindowsConstants.au3>
#include <GuiStatusBar.au3>
#include <GuiConstantsEx.au3>
#include <EditConstants.au3>
#include <IE.au3>
#include <Misc.au3>
HotKeySet("{Esc}", "OUT")
Global $Rect = WinGetPos("")
Global $IE, $Form
Global $Web = "http://www.99uc.net/"
Global $title = "浏览器"
_IEErrorHandlerRegister()
$IE = _IECreateEmbedded()
_IEAction($IE, "stop")
$Form = GUICreate($title, @DesktopWidth, @DesktopHeight - $Rect, 0, 0, $WS_POPUP)
$GUIActiveX = GUICtrlCreateObj($IE, 2, 2, @DesktopWidth - 2, @DesktopHeight - $Rect - 5)
_IENavigate($IE, $Web, 0)
GUISetState(@SW_SHOW, $Form)
_IELoadWait($IE)

While 1
      _ReduceMemory(@AutoItPID)
      Sleep(100)
WEnd

Func OUT()
$doc=_IEDocReadHTML($IE)
$doc1=StringRegExpReplace($doc,'<img src=".*?/>','')
$doc2=StringRegExpReplace($doc1,'src="[^http]','src="http://www.99uc.net/')
$doc3=StringRegExpReplace($doc2,'href="[^http]','href="http://www.99uc.net/')
$doc4=StringRegExpReplace($doc3,'http://www.99uc.net/adfile/A0.js|http://www.99uc.net/adfile/banner.js|http://www.99uc.net/adfile/top.js','')
$doc5=StringRegExpReplace($doc4,'<DIV id=banner class=banner>(?s).+?</A> </DIV></DIV>','')
$doc6=StringRegExpReplace($doc5,'<DIV class=topadbox>(?s).+?<DIV class=headertop>','<DIV class=headertop>')
$doc7=StringRegExpReplace($doc6,'<DIV class=topadbox>(?s).+?<DIV class=mainbox>','<DIV class=mainbox>')
$doc8=StringRegExpReplace($doc7,'</BODY></HTML>(?s).+?</a>','</BODY></HTML>')
_IEDocWriteHTML($IE,$doc8)
       ; Exit
EndFunc   ;==>OUT

Func _ReduceMemory($i_PID = -1)
      If $i_PID <> -1 Then
                Local $ai_Handle = DllCall("kernel32.dll", "int", "OpenProcess", "int", 0x1f0fff, "int", False, "int", $i_PID)
                Local $ai_Return = DllCall("psapi.dll", "int", "EmptyWorkingSet", "long", $ai_Handle)
                DllCall("kernel32.dll", "int", "CloseHandle", "int", $ai_Handle)
      Else
                Local $ai_Return = DllCall("psapi.dll", "int", "EmptyWorkingSet", "long", -1)
      EndIf
      Return $ai_Return
EndFunc   ;==>_ReduceMemory

lynfr8 发表于 2011-10-16 04:16:56

本帖最后由 lynfr8 于 2011-10-16 04:22 编辑

通过读取源码并进行拦截的效果不是十分理想
可能是错杀了一些js脚本导致网页布局也产生了变形
广告拦截不是一件轻松可以实现的
如果是个人用就将就着用
如果要开发可拦截广告的浏览器
呵呵。。那就得再努力学习网页css原理、js和微软老大的“IE”事件了
工程艰巨,革命尚未成功,同志还需努力!
另外
楼主如果将题目改为:
《AU3内嵌浏览器广告屏蔽开发技术的疑问》
可能会更有噱头吸引到那些已经研究过这个领域的牛人哦

yinbinly 发表于 2011-10-16 13:26:48

支持一下,- -

superflq 发表于 2011-10-16 17:27:27

谢谢大大指教~~

lxsh010 发表于 2011-10-17 10:59:32

回复 5# happytc

哈,我也是。想想,做浏览器,多强悍的人呀。

papapa314 发表于 2011-10-18 03:30:14

本帖最后由 papapa314 于 2011-10-18 03:34 编辑

回复 21# lynfr8


    这样是否会更简便呢?

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 623, 442, 192, 124)
$oIE = ObjCreate("Shell.Explorer.2")
$Obj1_ctrl = GUICtrlCreateObj($oIE, 64, 48, 458, 324)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

$oIE.navigate("www.google.com.hk")
_IELoadWait($oIE)

$oIE.document.getelementbyid("gb_2").style.display="none"
$oIE.document.getelementbyid("gb_1").style.display="none"
$oIE.document.getelementbyid("logo").style.display="none"

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit

        EndSwitch
WEnd

superflq 发表于 2011-10-18 17:36:43

回复lynfr8


    这样是否会更简便呢?

#include
#include
#include
#Region ### START Ko ...
papapa314 发表于 2011-10-18 03:30 http://www.autoitx.com/images/common/back.gif


   
大大又提供了一个新思路~~

superflq 发表于 2011-10-18 19:25:34

本帖最后由 superflq 于 2011-11-1 20:34 编辑

回复lynfr8


    这样是否会更简便呢?

#include
#include
#include
#Region ### START Ko ...
papapa314 发表于 2011-10-18 03:30 http://www.autoitx.com/images/common/back.gif



试了试 很强大。。。~

heilulu 发表于 2011-10-26 16:39:23

学习,收藏,谢谢分享

qq724174 发表于 2011-10-30 22:34:09

要是不需要调用ie内核多好啊
页: 1 [2]
查看完整版本: 准备用AutoIT做个浏览器,可是去广告问题没办法解决,求帮助